python脚本中的TypeError

Posted

技术标签:

【中文标题】python脚本中的TypeError【英文标题】:TypeError in python script 【发布时间】:2019-04-03 07:27:01 【问题描述】:

我收到一个 TypeError: 在我的 python 脚本中的字符串格式错误期间不是所有参数都被转换。 我正在尝试将 RFC 芯片中的 cardid 写入数据库,包括当前时间(有效)并获得一个选择查询来给我相应的用户(无效)

mysql.py”

def insertReading(tagId,action):
db = connect()
cur = db.cursor()
currentTime=strftime("%Y%m%d%H%M%S", localtime())
cur.execute("""INSERT INTO readings (tagId, time, action) VALUES (%s, %s, %s)""",(tagId,currentTime,action))
db.commit()
cur.execute("SELECT name,surname FROM users WHERE id = (SELECT userId FROM cards WHERE tagId=%s LIMIT 1)",(tagId))
row = cur.fetchone();
db.close()

我的错误信息如下:

File "/home/pi/SPI-Py/RPi.GPIO-0.6.4/attendance/mysql.py", line 33, in insertReading
    cur.execute("SELECT name,surname FROM users WHERE id = (SELECT userId FROM cards WHERE tagId=%s LIMIT 1)",(tagId))
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 210, in execute
    query = query % args
TypeError: not all arguments converted during string formatting

cur.execute("SELECT name,surname FROM users WHERE id = (SELECT userId FROM cards WHERE tagId=%s LIMIT 1)",(tagId)) 似乎是问题所在,我不知道为什么:( 非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

cur.execute() 需要将参数的元组、列表或字典插入到查询字符串中。在这种情况下,(tagId) 不是一个元组,它被评估为一个整数(或 tagid 的任何数据类型)。

>>> tagid = 123
>>> (tagid)
123
>>> type((tagid))
<type 'int'>
>>> (tagid,)
(123,)
>>> type((tagid,))
<type 'tuple'>

所以使用这样的元组:(tagId,)。 Tbe 逗号告诉 Python 应该创建一个元组。

【讨论】:

以上是关于python脚本中的TypeError的主要内容,如果未能解决你的问题,请参考以下文章

替换python脚本中的字符串并执行脚本

如何在 python 脚本文件中使用 shell 脚本中的变量?

Python导入并运行位于不同目录中的python脚本[重复]

Python脚本中的变量未定义

python脚本中的TypeError

Python中的多个ping脚本