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 - 博客园