我有像
这样的代码query_create_table += '%s %s,' % (ev_fields[i][0],ev_fields[i][1]).rstrip(',')
其中ev_fields是一个touples列表。我不想要','在最后一个字段。所以我使用rstrip()。但它抛出错误就像
AttributeError: 'tuple' object has no attribute 'rstrip'
我曾尝试将rstrip()放在其他地方,但它会引发语法错误。我如何在这里使用rstrip()?
答案 0 :(得分:2)
您可能错过了一个括号:
>>> print ('%s %s,' % ("A", "B")).rstrip(',')
A B
或者简单地说:
>>> print '%s %s' % ("A", "B")
A B
如果这不是您的意思且问题在ev_field
更深处,那么查看生成该列表的示例代码会有所帮助。
根据您的评论,可能正在寻找类似的内容:
s = ""
for i in range(5):
s += '%s %s, ' % (str(i), str(10 * i))
s = s.strip(', ')
print s
输出:
0 0, 1 10, 2 20, 3 30, 4 40
可以使用join
简化:
>>> print ', '.join('%s %s' % (str(i), str(10 * i)) for i in range(5))
0 0, 1 10, 2 20, 3 30, 4 40
答案 1 :(得分:1)
您需要为每个参数使用.rstrip(',')
:
query_create_table += '%s %s' % (ev_fields[i][0].rstrip(','),ev_fields[i][1].rstrip(','))
答案 2 :(得分:1)
如果这是循环所做的全部,您还可以使用join:
query_create_table = ",".join([ "%s %s" % (ev[0],ev[1]) for ev in ev_fields ])
答案 3 :(得分:0)
你可以使用它(如果我理解你的问题):
'%s %s,'.rstrip(',') % (ev_fields[i][0],ev_fields[i][1]).rstrip(',')
但是你不应该首先在python中使用+
进行字符串连接。
使用生成器表达式或至少列表理解和join
函数。
答案 4 :(得分:0)
rstrip()
是一个字符串方法,而不是元组方法。试试这个
query_create_table += '%s %s,' % (ev_fields[i][0].rstrip(','), ev_fields[i][1].rstrip(','))
或者,您可能真的要删除,
中的'%s %s,'
。如果是这样,只需将其从字符串中删除而不需要rstrip()
,即
query_create_table += '%s %s' % (ev_fields[i][0], ev_fields[i][1])
现在,忽略我刚才所说的内容,因为您似乎是通过字符串插值构建自己的字符串来构建SQL查询。您应该使用参数化SQL查询。而不是
query = "INSERT INTO table VALUES (%s, %s, %s)" % (var1, var2, var3)
cursor.execute(query)
你应该做这样的事情:
cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))
其中%s
是占位符(对于不同的数据库引擎,它可能不同,例如?
)。这可确保正确转义和引用参数,从而减少出现SQL注入漏洞的可能性。