尝试在数据库中插入变量会不断出错

时间:2019-05-21 04:44:10

标签: python sqlite

尝试在按下按钮时将列表的第二个元素插入数据库,但会不断出现错误

testing=connect(database='test.db')
    test_db=testing.cursor()
    test_db.execute('DELETE FROM test_table;')
    for zz in range(0, len(list), 2):
        print(titles[zz])
        query='INSERT INTO test_table (test_name) VALUES('+list[zz]+')'
        query2='INSERT INTO test_table (test_date) VALUES('+list2[zz]+')'
        test_db.execute(query)
        test_db.execute(query2)

这是我收到的错误

Exception in Tkinter callback
Traceback (most recent call last):

sqlite3.OperationalError: unrecognized token: "3D"

2 个答案:

答案 0 :(得分:2)

首先,您直接在查询字符串中写入参数值,这被认为是不好的做法。正确的方法是使用参数化查询。接下来,当您使用2条插入语句时,您将把每部电影分成2个数据库行,而不可能将标题和日期联系起来。最后,这是导致错误的原因,您必须做的是,SQL字符串必须用单引号引起来。

因此,该错误的直接解决方法是:

    query="INSERT INTO test_table (test_name) VALUES('"+titles[zz]+"')"
    query2="INSERT INTO test_table (test_date) VALUES('"+dates[zz]+"')"

但是恕我直言,您应该做的是,通过一个简单的参数化查询:

    query='INSERT INTO test_table (test_name, test_date) VALUES(?,?)'
    test_db.execute(query, (titles[zz], dates[zz]))

甚至更好,通过对所有插入仅准备一次查询:

test_db.execute('DELETE FROM test_table;')
query='INSERT INTO test_table (test_name, test_date) VALUES(?,?)'
test_db.execute-many(query, [(titles[zz], dates[zz])
                                      for zz in range(0, len(titles), 2)]

答案 1 :(得分:0)

不确定您使用的是哪个版本的python,但我认为这对2和3均适用;

testing=connect(database='test.db')
    test_db=connection.cursor()
    test_db.execute('DELETE FROM test_table;')
    for zz in range(0, len(titles), 2):
        query='INSERT INTO `test_table`(`test_name`, `test_date`) VALUES ({},{})'.format(titles[zz],dates[zz])
        test_db.execute(query)

缺少一些上下文,例如您的表结构,所以我不确定它是否可以工作。