Python pysqlite不接受我的qmark参数化

时间:2009-01-23 19:55:18

标签: python sqlite pysqlite python-db-api

我认为自己是个傻瓜,也许不会导入正确的包装,但是当我这样做时......


from pysqlite2 import dbapi2 as sqlite
import types
import re
import sys
...
    def create_asgn(self):
        stmt = "CREATE TABLE ? (login CHAR(8) PRIMARY KEY NOT NULL, grade INTEGER NOT NULL)"
        stmt2 = "insert into asgn values ('?', ?)"
        self.cursor.execute(stmt, (sys.argv[2],))
        self.cursor.execute(stmt2, [sys.argv[2], sys.argv[3]])
...
 I get the error pysqlite2.dbapi2.OperationalError: near "?": syntax error 

这对我来说没什么意义,因为文档显示pysqlite是qmark参数化的。我是python和db-api的新手,帮助我!致谢

3 个答案:

答案 0 :(得分:7)

那是因为参数只能传递给VALUES。表名不能参数化。

此外,您还在第二个查询的参数化参数周围引用了引号。删除引号,转义由下划线库自动处理。

答案 1 :(得分:2)

尝试删除分配给stmt2的行中的引号:

    stmt2 = "insert into asgn values (?, ?)"

另外,正如nosklo所说,你不能在CREATE TABLE语句中使用问号参数化。将表名直接粘贴到SQL中。

答案 2 :(得分:1)

如果你真的想这样做,试试这样的事情:

def读取(db =“projects”):

sql = "select * from %s"
sql = sql % db
c.execute(sql)