2024-03-28 21:45:50 发布
网友
我正在研究一个代码,它可以根据搜索条件从twitter获取实时tweets,并将其保存到Mysql数据库中。但当我在插入数据库时运行代码时,会引发一个错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 139: ordinal not in range(128)
我不明白问题出在这里是什么代码插入数据库
这里的正文是tweet中的文本,状态是它是否被处理。在
使用可以使用MySQLdb.escape_字符串用于转义unicode字符。在
>> MySQLdb.escape_string("'") "\\'"
另外,我认为你必须打开你的mysql.connector'with'use_unicode':真配置:
不要将tweet编码为UTF-8,也不要使用字符串格式来创建查询。在
请改用SQL参数:
tweetid = tweet['id_str'] userid = tweet['user']['id_str'] text = tweet['text'] cur.execute( """INSERT INTO twitterfeeeds(tweet_id, user_id,body,status) VALUES (%s, %s, %s, '0')""", (tweetid, userid, text))
是的,上面的代码和您的代码有区别;tweetid、userid和{}值都作为一个单独的参数(元组)传递给cursor.execute()方法。在
tweetid
userid
cursor.execute()
游标负责处理要插入数据库的数据的正确转义。这样可以避免SQL注入攻击(带有;DROP TABLE twitterfeeeds的tweet会立即破坏数据库),并启用查询计划优化。在
;DROP TABLE twitterfeeeds
这一切都需要您配置数据库连接以支持Unicode数据;在连接上将字符集设置为UTF-8:
或者更好的方法是,将数据库配置为使用UTF8MB4字符集(MySQL使用的UTF-8版本无法处理表情符号或U+FFFF之外的其他代码点):
# Note, no characterset specified con = MySQLdb.connect(host="localhost", user='root', password='', db='') cursor = con.cursor() cursor.execute('SET NAMES utf8mb4') cursor.execute('SET CHARACTER SET utf8mb4') cursor.execute('SET character_set_connection=utf8mb4')
使用可以使用MySQLdb.escape_字符串用于转义unicode字符。在
另外,我认为你必须打开你的mysql.connector'with'use_unicode':真配置:
^{pr2}$不要将tweet编码为UTF-8,也不要使用字符串格式来创建查询。在
请改用SQL参数:
是的,上面的代码和您的代码有区别;}值都作为一个单独的参数(元组)传递给
tweetid
、userid
和{cursor.execute()
方法。在游标负责处理要插入数据库的数据的正确转义。这样可以避免SQL注入攻击(带有
;DROP TABLE twitterfeeeds
的tweet会立即破坏数据库),并启用查询计划优化。在这一切都需要您配置数据库连接以支持Unicode数据;在连接上将字符集设置为UTF-8:
^{pr2}$或者更好的方法是,将数据库配置为使用UTF8MB4字符集(MySQL使用的UTF-8版本无法处理表情符号或U+FFFF之外的其他代码点):
相关问题 更多 >
编程相关推荐