【发布时间】:2021-10-27 23:16:20
【问题描述】:
嗨,我是 sql 新手,我正在寻找一种方法让我循环一个表,以便我可以检查 ItemName 是否已经在保存的第二个表中。 那是我的代码 myresult 和 myresult2 是 SELECT FROM ItemName 的 fetchall() 语句,其中 samevalue 为空,需要更新。
bollean_nodata = False
query = "SELECT nameItem FROM MARCT WHERE samevalue is null;"
mycursor.execute(query)
myresult = mycursor.fetchall()
try:
query = "SELECT nameItem FROM ExistingItems;"
mycursor.execute(query)
myresult2 = mycursor.fetchall()
except:
bollean_nodata = True
print("myresult2 not found making new exisitingItem data")
那部分不工作
if bollean_nodata != True:
for i in myresult2:
for i2 in myresult:
if i == i2:
query = "SELECT id FROM existingitems WHERE nameItem = %s;"
data = str(i2[0],)
data = (data,)
mycursor.execute(query, data)
id = mycursor.fetchall()
query = "UPDATE MARCT SET samevalue = %s WHERE nameItem = %s;"
i2 = str(i2[0])
id = str(id[0])
#Format the id from a string to a int
real_id = ""
for char in id:
if char == '(' or char == ')' or char == ',':
continue
else:
real_id += char
real_id = int(real_id)
data = (real_id, i2,)
mycursor.execute(query, data) <--- That part doesent update the table
当什么都没有的时候,那部分会在其中产生一些价值。没必要。
else:
query = "INSERT INTO EXISTINGITEMS (nameItem) VALUES (%s);"
count = 0
while count != len(list[0]):
Item = str(list[0][count])
data = (Item,)
mycursor.execute(query, data)
db.commit()
count += 1
但是第二个 mycursor.execute(query, data) 似乎没有更新表一中的数据。 谁能告诉我我做错了什么?
【问题讨论】:
-
如果所有数据都在数据库中,那么您可能不需要游标来执行任何操作,并且可以使用单个
UPDATE。如果您可以提供没有程序详细信息的 SQL 问题(带有完整的测试用例、表结构、示例数据和预期结果),那可能会有所帮助。 -
啊,谢谢。你有这方面的例子吗?
-
当然。但是我需要更多关于表(CREATE TABLE 语句)的详细信息、一些示例数据以及给定数据的预期结果。在 MySQL 命令行客户端中,每个表的
SHOW CREATE TABLE tblname;将至少提供CREATE TABLE详细信息。