在Python中创建一个执行SQLite查询和插入的函数

时间:2014-12-04 06:20:28

标签: python sqlite function insert execute

我试图写的这个功能不起作用,有人可以帮我找出原因吗?

我看过示例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)

1 个答案:

答案 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