Windows系统,MySQL,pyMySQL(#由于mysqldb在python2.X版本下才可使用,因此使用几乎相同的pyMySQL代替)
根据Alex的课程内容,代码如下:
import pymysql conn =pymysql.connect(host='192.168.1.106',port=3306,user='root',passwd='123456',db='oldboydb') #创建连接,相当于创建socket cursor =conn.cursor() #创建游标,即建立实例 effect_row =cursor.execute("update host set host ='1.1.1.2'") #执行SQL,返回收影响的行数
但是出现了错误:pymysql.err.ProgrammingError: (1146, "Table 'oldboydb.host' doesn't exist")。于是选择了另一种结构实现(使用字典进行连接参数的管理):
import pymysql.cursors config={ #待连接datebase属性对应字典 'host':'192.168.1.106', #Ip地址 'port':3306, #端口号 'user':'root', #表名 'passwd':'123456', #密码 'db':'oldboydb', #数据库 # 'charset': 'utf8mb4', #属性未知,可有可无 # 'cursorclass': pymysql.cursors.DictCursor, #属性未知,可有可无 } connection =pymysql.connect(**config) #创建连接,相当于创建socket cursor =connection.cursor() #创建游标,即建立实例 effect_row =cursor.execute('select * from student') #execute方法:执行SQL,并返回收影响行数;+原生命令 print(cursor.fetchone()) #fetchone方法:遍历一格 print(cursor.fetchone()) print(cursor.fetchall()) #etchall方法:遍历所有 data =[ #待插入数据 ('a1', 1, '2021-11-5', 'm'), ('b1', 2, '2020-11-5', 'w'), ('c1', 3, '2019-11-5', 'w'), ('d1', 4, '2018-11-5', 'm'), ] cursor.executemany('insert into student(name,age,register_date,gender) values (%s,%s,%s,%s)',data) #executemany方法:插入数据;+原生命令 connection.commit() #默认开启事务,因此需要commit一下 connection.close()
在学习的过程中遇到的问题:
1、始终提示没有pymysql库以及方法(已下载)
2、连接失败:pymysql.err.OperationalError: (1130, "192.168.0.113' is not allowed to connect to this MySQL server")
解决:
1、脑子抽抽了,创建.py文件名居然为包的名字
2、视频中grant all on *.* to 'root'@'%' identified by '123456'的grant授权方法已过时,参考了博客(MySQL 8报OperationalError: (1130, “XX‘ is not allowed to connect to this MySQL server“)的正确解决方法_qysh123的专栏-CSDN博客)后得以解决。需要注意的是,确认过端口号无误后便能够正常执行了,没有再进行后续的操作。
总结:pyMySQL python交互时,需要先授权,属性确定,然后python端通过指令完成对pyMySQL的操作。
PS:使用PyMySQL操作mysql数据库 - w_only - 博客园