我想在Python中使用sqlite3。我有一个有四列的表(id INT,other_no INT,position TEXT,classification TEXT,主键是id)。在此表中,用于分类的列保留为空,并将根据表2中的信息进行更新。请参阅下面的代码。然后我有第二个表,它有三列。(id INT,class TEXT,type TEXT,主键(id))。基本上,这两个表有两个公共列。在这两个表中,主键都是id列,classification和class列最终必须合并。因此代码需要能够遍历表2,并且每当它在表1中找到匹配的id时,都需要从表2中的classification列更新class列(表1的)。构建这两个表的信息来自两个单独的文件。在
# function to create Table1...
# function to create Table2...
(表按预期创建)。当我试图用表2中的信息更新table1时,会出现问题。在
^{pr2}$但是,第2行出现了一个错误:TypeError:需要一个float。我知道这是因为我在connect方法中加入了两个参数。但是如果我只连接到Table1,就会得到错误Table2没有被定义。在
我读了这篇文章Updating a column in one table through a column in another table我理解其中的逻辑,但我不能将SQL代码翻译成Python。我已经做了一段时间了,但似乎不能得到它。你能帮忙吗?谢谢
在一个用户的评论之后,我得到了这个代码,但它仍然不起作用:
#connect to the database containing the two tables
cur.execute("SELECT id FROM Table1")
for row in cur.fetchall():
row_table1 = row[0]
cur.execute("SELECT (id, class) FROM Table2")
for row1 in cur.fetchall():
row_table2 = row[0] #catches the id
row_table2_class = row[1] #catches the name
if row_table1 == row_table2:
print "yes" #as a test for me to see the loop worked
new_class = row_table_class
cur.execute("UPDATE Table1 SET classification=? WHERE id=?", (new_class, row_table1))
con.commit()
然而,我从中得到了一个操作错误。我知道这是我的语法,但就像我说的,我是新手,所以任何指导都是非常感谢的。在
你需要更多的代码。你的代码逻辑应该是这样的:
代码中缺少SELECT查询:
你不能这样直接测试。您需要先使用SELECT查询来获取这两个表中的行,然后才能以所需的方式测试它们。在
找到下面的修改代码从您张贴在上面。我刚刚在这里直接输入了代码,所以我没有机会测试它,但是您可以查看它以获得一个想法。这甚至可能会发生。在
而且,这绝不是最有效的方法。这其实很笨重。尤其是因为对于Table1中的每个id,每次都要获取Table2的所有行以进行匹配。取而代之的是,您需要获取Table1的所有行一次,然后获取Table2的所有行,然后将它们匹配起来。我将离开优化,使这更快地交给你。在
^{pr2}$相关问题 更多 >
编程相关推荐