我使用Python,得到了“不正确的整数值:'(2L,)'(第1行的列'id')
我就是这么做的:
for user in users:
userID = self.selectQuery("SELECT COUNT(id) FROM user;")
self.changeQuery("INSERT INTO user VALUES ('" + str(userID[0]) + "', '" + str(user) + "','','');")
def changeQuery (self, query):
connection = MySQLdb.connect(self.mysql_host, self.mysql_user, self.mysql_password, self.mysql_db)
cursor = connection.cursor()
cursor.execute (query)
connection.commit()
cursor.close()
connection.close()
当您可以使用SQL参数时,不要使用
str()
和字符串连接;另外,userID
变量包含元组列表,而不是整数列表;您的函数必须以行的形式返回所有结果。如果您有一个数据库游标引用,则可以执行以下操作:使用SQL参数还有一个额外的优点,即数据库适配器将对传入的任何值应用正确的引号。例如,字符串将被引用,整数不会被引用,最重要的是,危险的SQL注入尝试将被阻止。在
指定SQL参数的确切语法取决于数据库适配器。我使用了
%s
样式的位置参数(正如您使用的mysql标记一样),但是根据数据库适配器的不同,可以支持以下任何一个:?
位置参数%s
位置参数(例如使用MySQLdb):name
命名参数%(name)s
命名参数请查看数据库适配器文档以了解支持的确切变体。在
在您的例子中,
userID[0]
是一个包含python长整数的元组,它的字符串表示包括一个L
。您的数据库即使不接受查询也不会接受,因为您假设所有的输入值都是字符串,而且不管怎样,您都在值的周围加上引号。查询需要整数的字符串"0"
将无法工作。在要将其外推到扩展函数中:
^{pr2}$打电话给:
相关问题 更多 >
编程相关推荐