python mysql错误的字符串值警告

时间:2012-01-28 18:13:12

标签: python mysql

我正在尝试使用python将值输入到mysql数据库中。为此,我有类似的东西:

import MySQLdb
variables=[]*10 #list of variables.
n=len(variables)

#create python-mysql cursor connection
..
#load values into mysql:
for i in range(0,n):
    cursor.executemany(sql, variables[i])

这会在行中发现一些错误(约占行数的1%):

Warning: Incorrect string value: '\xD0\xA2\xD0\xB5\xD0\xBA...' for column 'Link' at row 395
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\x91\xD0\xB8\xD1\x82...' for column 'Link' at row 431
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\x91\xD0\xB8\xD1\x82...' for column 'Link' at row 568
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\xA7\xD0\xB5\xD0\xBB...' for column 'Link' at row 665
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\x96\xD0\xB5\xD0\xBB...' for column 'Link' at row 827
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\x9B\xD1\x8E\xD0\xB1...' for column 'Link' at row 1242
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\xA2\xD0\xB0\xD0\xB9...' for column 'Link' at row 1310
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\x9B\xD1\x8E\xD0\xB1...' for column 'Link' at row 1468
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\x94\xD0\xBD\xD0\xB5...' for column 'Link' at row 1687
cursor.executemany(sql, variables[i])
mergeDB.py:85: Warning: Incorrect string value: '\xD0\x91\xD0\xB5\xD1\x81...' for column 'Link' at row 1848
cursor.executemany(sql, variables[i])

从以前的SOF主题中,我尝试在我的python文件中使用:

ALTER TABLE dbx.tablex MODIFY Link VARCHAR(255) CHARACTER SET utf8; COLLATE utf8_general_ci NOT NULL;

但这给了我一个错误:

ALTER TABLE dbx.tablex MODIFY Link VARCHAR(255) CHARACTER SET utf8; COLLATE utf8_general_ci NOT NULL;
          ^
SyntaxError: invalid syntax

如何解决这个问题?我怎样才能简单地删除(告诉python不要加载行)具有“不正确的字符串值?”的行。在这个循环中:

for i in range(0,n):
    cursor.executemany(sql, variables[i])

1 个答案:

答案 0 :(得分:4)

ALTER TABLE dbx.tablex MODIFY Link VARCHAR(255) CHARACTER SET utf8; COLLATE utf8_general_ci NOT NULL;

这是一个MySQL查询,而不是Python语句。您需要将上述内容传递给MySQL。

此外,[] * 10没有按照您的想法执行。迭代变量列表的正确方法是:

for variable in variables:
    cursor.execute(sql, variable)

但你可以直接这样做:

cursor.executemany(sql, variables)