2017-09-23 59 views
-1

我創建了三個表格,並且我想創建一個函數,該函數根據其中一個變量值使用變量值填充表格,因爲它們由另一個函數更新。如何將表名設置爲變量並將變量插入到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") 

此代碼不會給我任何錯誤,但它不會填充表

+0

它不會顯示任何錯誤,因爲您明確隱藏它們。刪除所有這些嘗試/除外,並顯示實際的錯誤是什麼。 –

+0

這裏有很多東西。在創建表之後,你可能需要'conn.commit()'更改。但是''SELECT item2 FROM {} ORDER BY id DESC LIMIT 1'.format(table)'在'{}'後面需要一個空格,然後是'INSERT INTO {}(?,?)VALUES(item1,item2 )'.format(table)'是回到前面,可能應該是''INSERT INTO {}(item1,item2)VALUES(?,?)'.format(table)'。然後,'item1'和'item2'沒有在'tablepopulate()'中定義。 – roganjosh

+0

小心輸入錯誤:'CREATE TABLE IF NOT EXIST(S)','if xy =(=)None:' – PRMoureu

回答

0

您需要在做出更改後進行修改。所以像conn.commit(),其中conn是你稱爲你的數據庫連接。

另外,if xy == None :不是最佳實踐;如果你做了c.fetchall(),那麼你會得到一個空列表。您可以使用if not xy:來涵蓋兩個基地,這會同時處理兩個虛假案件。

item1item2沒有定義,我可以看到。這將在tablepopulate()中引發錯誤,因此您可能想將它們作爲參數傳遞。

最後,使用嵌套的try/except結構並不是一個好主意。首先,你使用的是毯子except,而不是捕捉一個特定的錯誤,但是,如果你達到那個水平,那麼print("all tables are populated")幾乎肯定是不正確的。

-2

不管你如何解決這個問題

這一行:

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

應該像:

insert ='INSERT INTO {0} VALUES("{1}","{2}")'.format(tab,item1,item2) 
+0

不,它不應該。 –

+0

那麼,不,因爲OP是正確構建查詢的一半。現在,您只需將參數格式化爲字符串。 – roganjosh

相關問題