python - sqlite3 python 参数传递问题

标签 python sql sqlite

我有这个代码:

conn = sqlite3.connect("testDB")
curs = conn.cursor()

curs.execute("CREATE TABLE IF NOT EXISTS testTable( col1 VARCHAR, col2 VARCHAR)")
c1 = "value1"
c2 = "value2"
curs.execute("INSERT INTO testTable VALUES (?,?)", (c1, c2))#this works fine
conn.commit()

def inDB(curs, table, col, value):
    curs.execute("SELECT * FROM ? WHERE ?=?",(table, col, value)) #problemis here
    return bool(curs.fetchone())

print inDB(curs, "testTable", "col1", c1)

它给了我这个错误:

Traceback (most recent call last):
  File "test.py", line 16, in <module>
    print inDB(curs, "testTable", "col1", c1)
  File "test.py", line 13, in inDB
    curs.execute("SELECT * FROM ? WHERE ?=?",(table, col, value))
sqlite3.OperationalError: near "?": syntax error

为什么这不起作用以及如何解决这个问题?

最佳答案

我不确定,但我认为您不能在表名或列名上使用绑定(bind)变量...

尝试

curs.execute("INSERT INTO ? VALUES (?,?)", (testTable, c1, c2))

我打赌这行不通。在这种情况下,您需要避免在表名或列名上使用 ?。我宁愿使用串联运算符来连接字符串,就像 Java 中的“+”一样。例如(Java风格):

("INSERT INTO " + testTable + " VALUES (?,?)");

关于python - sqlite3 python 参数传递问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460821/

相关文章:

php - SQL内连接获取列中的所有数据

python - pyqt信号问题

python - 使用时间、日期、timedelta

mysql - 具有多个连接的分页计数查询

java - 回收商聊天分页在顶部添加新消息

sqlite在打开连接后首先执行查询慢

使用嵌入列表的python队列

python - 将 django 项目迁移到新服务器,并且另一个 django 项目的 postgresql 数据库已存在

sqlite - 如何使用QSqlQuery插入包含 '%'的字符串?

ios - 值在数据库中插入两次