带有多个插入的Python sqlite3 executioncript()错误

时间:2012-05-17 10:19:54

标签: python sql sqlite

我正在将我的大脑从PHP + MySQL转移到Python,目前我正在使用sqlite作为其他内容的中介,因为它是内置的。

当我尝试设置要使用的初始数据库时,它会在INSERT多行INSERT语句上抛出错误:

import sqlite3

query = """CREATE TABLE IF NOT EXISTS "users" (
             "userID" INTEGER PRIMARY KEY autoincrement,
             "email" varchar(255) NOT NULL,
             "forename" varchar(50) NOT NULL,
             "surname" varchar(50) NOT NULL
           );
           INSERT INTO "users" ("userID", "email", "forename", "surname") 
           VALUES
             (1, 'user1@example.com', 'Test', 'User'),
             (2, 'user2@example.com', 'Test', 'User');"""

 db_conn = sqlite3.connect('test.db')
 try:
     db_conn.cursor().executescript(query)
     db_conn.commit()
 except:
     print "error with database"
     raise
 finally:
     db_conn.close()

当我运行它时,我得到:

error with database
Traceback (most recent call last):
  File "dbTest.py", line 20, in <module>
    db_conn.cursor().executescript(query)
sqlite2.OperationalError: near ",": syntax error

我花了很长时间才找到确切的“,”它不喜欢(我的意思是,真的吗?SQL错误很糟糕!)。确实是“,”分隔INSERT行。

我做了什么蠢事?

1 个答案:

答案 0 :(得分:1)

对于你的插入,我会使用.executemany()而不是执行脚本,如果可以的话。否则,如果您不能,则INSERT声明需要与您希望传递的VALUES集合分开。

query = """INSERT INTO "users" ("userID", "email", "forename", "surname") 
           VALUES
           (?, ?, ?, ?)
        """
user_list = ((1, 'user1@example.com', 'Test', 'User'), (2, 'user2@example.com', 'Test', 'User'))
cursor.executemany("INSERT INTO myTable(data) values (?) ", user_list)

编辑: 根据这个post,你实际上可以在一个INSERT语句中有多个值集,但语法远非漂亮。