2014-12-04 70 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 
相关问题