2014-12-04 85 views
0

我試圖寫這個函數不工作,有人可以幫我找出原因嗎?在Python中創建一個SQLite查詢和插入函數

我看過示例HERE,但它與我所擁有的有點太不一樣了。

字符串有些問題,我不確定如何正確放置SQLite查詢字符串,我創建的數據庫沒有被填充。

這裏是什麼樣的功能,看起來像至今:

def checkInsert(db_c, column, table, item, db_db): 
    strng1 = ("SELECT %s FROM %s WHERE %s=?", (item,)) % (column, table, column) 
    strng2 = ("INSERT INTO %s (%s) VALUES(?);", (item,)) % (table, column) 
    db_c.execute(strng1) 
    check = db_c.fetchone() 
    if check is None: 
     db_c.execute(strng2) 
     db_db.commit() 
    else: 
     pass 

目前我寫出來,下面所有的腳本:

dog = "mastiff" 
cat = "jaguar" 
bird = "parrot" 

mem_c.execute("SELECT dog FROM dogs WHERE dog=? ", (dog,)) 
dog_check = mem_c.fetchone() 
if dog_check is None: 
    mem_c.execute("INSERT INTO dogs (dog) VALUES(?);", (dog,)) 
    mem_db.commit() 
else: 
    pass 
mem_c.execute("SELECT cat FROM cats WHERE cat=? ", (cat,)) 
cat_check = mem_c.fetchone() 
if cat_check is None: 
    mem_c.execute("INSERT INTO cats (cat) VALUES(?);", (cat,)) 
    mem_db.commit() 
else: 
    pass 
mem_c.execute("SELECT bird FROM birds WHERE bird=? ", (bird,)) 
bird_check = mem_c.fetchone() 
if bird_check is None: 
    mem_c.execute("INSERT INTO birds (bird) VALUES(?);", (bird,)) 
    mem_db.commit() 
else: 
    pass 

如果我得到這個權利,函數應該允許我採取上面的腳本,而不是簡單地寫出來,像這樣:

dog = "mastiff" 
cat = "jaguar" 
bird = "parrot" 

checkInsert(mem_c, 'dog', 'dogs', dog, mem_db) 
checkInsert(mem_c, 'cat', 'cats', cat, mem_db) 
checkInsert(mem_c, 'bird', 'birds', bird, mem_db) 
+0

你有沒有考慮過使用Django及其強大的ORM。 IRL你可能有困難的時候試圖自己實現所有的東西,而不是使用框架,尤其是像Django那樣好。 – micgeronimo 2014-12-04 06:58:08

+1

你的問題是什麼?到目前爲止,你只是告訴我們你想做什麼......然而,一個明顯的錯誤是''column,table,column''實際上應該是'strng1'定義中的'(column,table,column)'。 'strng2'行中存在相同的錯誤。 – sebastian 2014-12-04 07:26:00

+0

抱歉,試圖編寫一個函數,它目前不工作,試圖找出原因。 – mdandr 2014-12-04 13:06:12

回答

0

我去它工作!最初我沒有正確格式化字符串。

問題是我試圖以某種方式將item變量放在字符串中,當它應該在db_c.execute行中時,這樣可以正確執行查詢。

基本上查詢字符串需要先用列和表字符串定義,然後一旦查詢需要執行,查詢字符串和item變量就放在db_c.execute()函數中。

希望這有助於其他人有這個問題。

def checkInsert(db_c, column, table, item, db_db): 
    strng1 = "SELECT %s FROM %s WHERE %s=?" % (column, table, column) 
    strng2 = "INSERT INTO %s (%s) VALUES(?);" % (table, column) 
    db_c.execute(strng1, (item,)) 
    check = db_c.fetchone() 
    if check is None: 
     db_c.execute(strng2, (item,)) 
     db_db.commit() 
    else: 
     pass