1

我想我是个傻瓜,也许没有导入正确的包,但是当我这样做时......


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]])
...
我收到错误 pysqlite2.dbapi2.OperationalError: near "?": syntax error

这对我来说意义不大,因为文档显示 pysqlite 是 qmark 参数化的。不过,我是 python 和 db-api 的新手,请帮帮我!谢谢

4

3 回答 3

7

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

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

于 2009-01-23T20:05:50.603 回答
2

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

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

此外,正如 nosklo 所说,您不能将问号参数化与 CREATE TABLE 语句一起使用。将表名直接粘贴到 SQL 中。

于 2009-01-23T20:10:00.017 回答
1

如果您真的想这样做,请尝试以下操作:

定义读取(db =“项目”):

sql = "select * from %s"
sql = sql % db
c.execute(sql)
于 2009-02-20T22:09:07.913 回答