Python中的sqlite3:当主键是sam时,通过另一个表中的列更新一个表中的列

2024-03-28 09:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在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()

然而,我从中得到了一个操作错误。我知道这是我的语法,但就像我说的,我是新手,所以任何指导都是非常感谢的。在


Tags: theto代码textin信息idclass
1条回答
网友
1楼 · 发布于 2024-03-28 09:12:19

你需要更多的代码。你的代码逻辑应该是这样的:

  1. 连接到sqlite数据库
  2. 对TABLE2执行SELECT查询并获取行。把这个叫做rows2。在
  3. 对TABLE1执行SELECT查询并获取行。把这一行叫做1。在
  4. 对于行1中的每个id,如果行2中存在此id,则对表1中的特定id执行更新。在

代码中缺少SELECT查询:

cur = con.cursor()
if id in Table2 == id in Table1:
    new_classification = Table2.class 

你不能这样直接测试。您需要先使用SELECT查询来获取这两个表中的行,然后才能以所需的方式测试它们。在

找到下面的修改代码从您张贴在上面。我刚刚在这里直接输入了代码,所以我没有机会测试它,但是您可以查看它以获得一个想法。这甚至可能会发生。在

而且,这绝不是最有效的方法。这其实很笨重。尤其是因为对于Table1中的每个id,每次都要获取Table2的所有行以进行匹配。取而代之的是,您需要获取Table1的所有行一次,然后获取Table2的所有行,然后将它们匹配起来。我将离开优化,使这更快地交给你。在

^{pr2}$

相关问题 更多 >