python3+连接mysql8+数据库
在使用mysql官方的python插件mysql-connector
时发现突然报了个错误:
mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
后来才知道,MySQL8和低版本不兼容,解决办法有两种:
- 把mysql8降级成低版本;
- 把认证的选项设置为“Use Legacy Authentication Method”
然而我就比较厉害了,我这两个都没有,我选择使用pymysql
,
python3 -m pip install PyMySQL
连接mysql
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost",user="root",password="123456",db="test",port=3306,charset='utf8')
# 或者简写为:
db = pymysql.connect("localhost","root","Aa123456","test")
执行sql语句
插入单条数据
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
def insertSql(hot_song_name,hot_song_id):
str_url = "https://www.baidu.com"
try:
cursor.execute('insert into hot_songs(song_name,song_netease_id,song_url) values(%s,%s,%s)',(hot_song_name,hot_song_id,str_url))
# 数据变化要提交sql语句
db.commit()
except:
# 操作回退
db.rollback()
return
print(cursor.rowcount, "{}:添加数据库成功。".format(hot_song_name))
插入多条数据
sql = 'insert into hot_songs (song_name,song_netease_id,song_url) values(%s,%s,%s)'
val = [(hot_song_name,hot_song_id,str_url),(hot_song_name,hot_song_id,str_url),(hot_song_name,hot_song_id,str_url)]
cursor.execute(sql,val)
关闭数据库
# 关闭数据库连接
cursor.close()
db.close()
判断插入的数据在当前数据库中是否存在
我当前使用的方法是,给其中的非主键song_id列设置unique属性,利用插入相同song_id报错回退来避免插入重复数据。
给列增加unique属性:
alter table hot_songs add unique(song_netease_id);