我得到一个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(“选择名称,来自用户的姓氏ID =(选择来自卡片的用户ID,WHERE tagId =%s LIMIT 1)”,(tagId))似乎是问题所在,我不知道为什么:( 任何帮助将不胜感激。
答案 0 :(得分:0)
cur.execute()
需要将元组,参数列表或字典插入查询字符串。在这种情况下,(tagId)
不是元组,它将被评估为整数(或任何tagid
数据类型)。
>>> tagid = 123
>>> (tagid)
123
>>> type((tagid))
<type 'int'>
>>> (tagid,)
(123,)
>>> type((tagid,))
<type 'tuple'>
因此,使用如下这样的元组:(tagId,)
。 Tbe逗号告诉Python应该创建一个元组。