我试图写的这个功能不起作用,有人可以帮我找出原因吗?
我看过示例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 :(得分:0)
我搞定了!最初我没有正确格式化字符串。
问题是我试图以某种方式将item
变量放在字符串中,当它应该在db_c.execute
行中时,以便可以正确执行查询。
基本上,需要首先使用列和表字符串定义查询字符串,然后一旦需要执行查询,查询字符串和item
变量就会放在db_c.execute()
函数中。 / p>
希望如果其他人遇到这个问题,这会有所帮助。
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