如何将表名设置为变量并将变量插入到python中的sqlite表中?

时间:2017-09-23 09:22:39

标签: python sqlite

我创建了三个表,我想创建一个函数,根据其中一个变量值填充表中的变量值,因为它们是由另一个函数更新的。

 c.execute('CREATE TABLE IF NOT EXISTS unu (id INTEGER PRIMARY KEY, item1 TEXT, item2 INT)')
 c.execute('CREATE TABLE IF NOT EXISTS doi (id INTEGER PRIMARY KEY, item1 TEXT, item2 INT)')
 c.execute('CREATE TABLE IF NOT EXISTS trei (id INTEGER PRIMARY KEY, item1 TEXT, item2 INT)')

update_tables()

def tablepopulate(table):
    query = 'SELECT item2 FROM {} ORDER BY id DESC LIMIT 1'.format(table) 
    insert ='INSERT INTO {} (item1,item2) VALUES (?,?)'.format(table)
    c.execute(query)
    xy=c.fetchone()
    if xy == None :
        c.execute(insert,(item1, item2))
    elif xy[1] == 0
        c.execute(insert,(item1, item2))

try:
    tablepopulate("unu")
except:
    try:
       tablepopulate("doi")
    except:
       try:
          tablepopulate("trei")
       except:
          print("all tables are populated")

此代码不会给我任何错误,但不会填充表格

2 个答案:

答案 0 :(得分:0)

您需要在进行更改后提交更改。所以类似于conn.commit(),其中conn就是你所谓的数据库连接。

另外,if xy == None :不是最佳做法;如果您已完成c.fetchall(),那么您将获得一个空列表。您可以使用if not xy:覆盖这两个基础,这将捕获两个虚假案例。

item1item2未定义,我可以看到。这将在tablepopulate()中抛出错误,因此您可能希望将它们作为参数传递。

最后,使用您拥有的嵌套try / except结构并不是一个好主意。首先,你使用毯子except而不是捕捉特定错误,但是,如果你达到那个水平,print("all tables are populated")几乎肯定不是真的。

答案 1 :(得分:-2)

无论你如何解决问题

这一行:

LaunchStep

应该是这样的:

insert ='INSERT INTO {}(?,?)VALUES(item1,item2)'.format(table)