python3.5 操作mysql的模块不是MySQLdb了,而是pymysql
下载安装pymysql
可以使用浏览器或者迅雷下载,或者干脆再linux上,wget下载然后再传到windows上
https://pypi.python.org/packages/source/P/PyMySQL3/PyMySQL3-0.5.tar.gz
解压之后
运行cmd,切换到PyMySQL3-0.5目录,执行如下命令安装此插件
python setup.py install
安装完毕,重新打开pycharm软件
把sql语句放在一个文件中
然后写一个python脚本连接数据库,执行上面语句
其中mysql库名为dbuser,连接此测试库的用户名和密码都是dbuser,此表是从测试库上拖下来的,自己测试机器更新完没问题,再导入到测试库
逐行执行每条update语句
#Auther nmap #coding=utf-8 import pymysql conn = pymysql.connect(host="10.0.2.17",port=3306,user="dbuser",passwd="dbuser",db="dbuser",charset="utf8") cur = conn.cursor() f_sql=open('update','r',encoding='utf-8') for line in f_sql: sql = line cur.execute(sql)
这次要更新的字段是c_nickname 它是昵称。
下面账号都是游戏的机器人账号,改成中文的话更加真实点
下图为更新完毕的效果,昵称这里默认是和c_numbercode一致,这里都改成中文的了
之所以使用python去操作数据库,而不是直接在mysql命令行执行更新,是自己遇到一个一时无法解决的小问题。
在mysql命令行批量更新时,执行总是报错,而且即使成功的更新,插入之后也变成乱码了。
比如下面sql语句
update tab_user set c_nickname='汉芬菲' where c_numbercode='50001970'; update tab_user set c_nickname='连世英' where c_numbercode='50001971'; update tab_user set c_nickname='言心' where c_numbercode like "50001972"; update tab_user set c_nickname='静逸' where c_numbercode like "50001973"; update tab_user set c_nickname='hehe' where c_numbercode='50001974'; update tab_user set c_nickname='厚孤晴' where c_numbercode='50001975'; update tab_user set c_nickname='厚孤晴' where c_numbercode='50001975'; update tab_user set c_nickname='初蝶' where c_numbercode='50001976'; update tab_user set c_nickname='夏青' where c_numbercode='50001977'; update tab_user set c_nickname='沃德' where c_numbercode='50001978'; update tab_user set c_nickname='轩辕' where c_numbercode='50001979'; update tab_user set c_nickname='痴梅' where c_numbercode='50001980'; update tab_user set c_nickname='9527' where c_numbercode='50001981'; update tab_user set c_nickname='莫忆枫' where c_numbercode='50001982'; update tab_user set c_nickname='申屠' where c_numbercode='50001983'; update tab_user set c_nickname='甄梦' where c_numbercode='50001984';
在mysql命令行执行更新时,如下
报错情况如下,总是提示语法错误。但是每条sql语句单独拿出来又能执行成功,而且不会乱码,奇怪
mysql> update tab_user set c_nickname='汉芬菲' where c_numbercode='50001970'; update tab_user set c_nickname='连世英' where c_numbercode='50001971'; update tab_user set c_nickname='言心' where c_numbercode like "50001972"; update tab_user set c_nickname='静逸' where c_numbercode like "50001973"; update tab_user set c_nickname='hehe' where c_numbercode='50001974'; update tab_user set c_nickname='厚孤晴' where c_numbercode='50001975'; update tab_user set c_nickname='厚孤晴' where c_numbercode='50001975'; update tab_user set c_nickname='初蝶' where c_numbercode='50001976'; update tab_user set c_nickname='夏青' where c_numbercode='50001977'; update tab_user set c_nickname='沃德' where c_numbercode='50001978'; update tab_user set c_nickname='轩辕' where c_numbercode='50001979'; update tab_user set c_nickname='痴梅' where c_numbercode='50001980'; update tab_user set c_nickname='9527' where c_numbercode='50001981'; update tab_user set c_nickname='莫忆枫' where c_numbercode='50001982'; update tab_user set c_nickname='申屠' where c_numbercode='50001983'; update tab_user set c_nickname='甄梦' where c_numbercode='50001984'; Database changed Rows matched: 1 Changed: 0 Warnings: 0 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '50001971'' at line 1 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''瑷€蹇? where c_numbercode like "50001972"' at line 1 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''闈欓€? where c_numbercode like "50001973"' at line 1 Database changed Rows matched: 1 Changed: 0 Warnings: 0 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '50001975'' at line 1 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '50001975'' at line 1 Database changed Rows matched: 1 Changed: 1 Warnings: 0 Database changed Rows matched: 1 Changed: 1 Warnings: 0 Database changed Rows matched: 1 Changed: 1 Warnings: 0 Database changed Rows matched: 1 Changed: 1 Warnings: 0 1366 - Incorrect string value: '\xEE\x95\xAA' for column 'c_nickname' at row 1 Database changed Rows matched: 1 Changed: 0 Warnings: 0 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '50001982'' at line 1 Database changed Rows matched: 1 Changed: 1 Warnings: 0 Database changed Rows matched: 1 Changed: 1 Warnings: 0 mysql>
下面是通过Navicat工具执行更新时,数据库乱码的情况
最后采用python去操作数据库,一切正常