python脚本中的TypeError

时间:2018-10-30 09:32:32

标签: python-2.7 typeerror

我得到一个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))似乎是问题所在,我不知道为什么:( 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

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