pymysql查询中的问号

0 投票
1 回答
1158 浏览
提问于 2025-04-18 10:03

我刚开始学习Python,之前用的是PHP5。我看到有人提到用qmark参数的写法来准备查询,但我遇到了以下问题:

Traceback (most recent call last):
  File "t.py", line 10, in <module>
    cursor.execute("SELECT * FROM object WHERE otype = ?", ["user"])
  File "/usr/local/lib/python3.4/site-packages/pymysql/cursors.py", line 130, in execute
    query = query % self._escape_args(args, conn)
TypeError: not all arguments converted during string formatting

这个写法是只适用于sqlite连接器吗?

import sys
import pymysql

try:
    connection = pymysql.connect(host="127.0.0.1", user="root", passwd="pass", db="xxx")
except:
    sys.exit("Database connection error")

cursor = connection.cursor()
cursor.execute("SELECT * FROM object WHERE otype = ?", "user")

for row in cursor:
   print(row)

cursor.close()
connection.close()

1 个回答

2

是的。很不幸的是,数据库API的规范让每个实现者自己选择参数的格式。pysqlite选择了问号(?),而MySQLdb选择了%s。因为pymsql可以直接替代MySQLdb,所以它也使用%s。

撰写回答