Python 不正确的整数值 : '(2L,)' for column 'id' at row 1

标签 python mysql

我使用 Python,我得到一个“不正确的整数值:第 1 行的‘id’列的‘(2L,)’”

这就是我所做的:

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 变量包含元组列表,而不是整数列表;您的函数必须将所有结果作为行返回。如果您有数据库游标引用,则以下内容将起作用:

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

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

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

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

检查您的数据库适配器文档以了解受支持的确切变体。

你的情况是 userID[0] 是一个包含 python 长整数的 元组,其字符串表示形式包括 L .您的数据库即使不接受也不会接受您的查询,因为您假设所有输入值无论如何都是字符串,并且无论如何您都在值周围加上引号。查询字符串 "0",其中应为整数将不起作用。

将其外推到您的扩展函数:

def changeQuery(self, query, parameters=()):    
    connection = MySQLdb.connect(self.mysql_host, self.mysql_user, self.mysql_password, self.mysql_db)
    cursor = connection.cursor()
    cursor.execute(query, parameters)
    connection.commit()
    cursor.close()
    connection.close()

并调用:

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

关于Python 不正确的整数值 : '(2L,)' for column 'id' at row 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916928/

相关文章:

javascript - 使用不带 url 的 python 脚本从网页下载文件,调用 onClick 函数

python - Web2Py:自定义两步验证表单

java - 是什么导致了 Android Studio 3.1 - java.io.IOException : Failed to find byte code for javax/naming/Referenceable

mysql - 原始mysqldump文件导入: Cannot add foreign key constraint?

MySQL选择连接表中多行的位置

Python MySQLdb 没有返回上次查询的结果?

python - Apache 下的 webapp2(= 没有 Google App Engine)

python - 同时重新编码多个变量

MySQL:如何按数字选择列?

php - 使用 PHP 备份数据库 - mysqldump