Python 整数值错误值:'(2L,)' for column 'id' at row 1

2024-09-30 00:34:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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()

Tags: inselfidforclosemysql整数connection
1条回答
网友
1楼 · 发布于 2024-09-30 00:34:50

当您可以使用SQL参数时,不要使用str()和字符串连接;另外,userID变量包含元组列表,而不是整数列表;您的函数必须以行的形式返回所有结果。如果您有一个数据库游标引用,则可以执行以下操作:

cursor.execute("INSERT INTO user VALUES (%s, %s,'','');", (userID[0][0], user))

使用SQL参数还有一个额外的优点,即数据库适配器将对传入的任何值应用正确的引号。例如,字符串将被引用,整数不会被引用,最重要的是,危险的SQL注入尝试将被阻止。在

指定SQL参数的确切语法取决于数据库适配器。我使用了%s样式的位置参数(正如您使用的标记一样),但是根据数据库适配器的不同,可以支持以下任何一个:

  • ?位置参数
  • %s位置参数(例如使用MySQLdb)
  • :name命名参数
  • %(name)s命名参数

请查看数据库适配器文档以了解支持的确切变体。在

在您的例子中,userID[0]是一个包含python长整数的元组,它的字符串表示包括一个L。您的数据库即使不接受查询也不会接受,因为您假设所有的输入值都是字符串,而且不管怎样,您都在值的周围加上引号。查询需要整数的字符串"0"将无法工作。在

要将其外推到扩展函数中:

^{pr2}$

打电话给:

self.changeQuery("INSERT INTO user VALUES (%s, %s,'','');", (userID[0][0], user))

相关问题 更多 >

    热门问题