python3+连接mysql8+数据库

0

在使用mysql官方的python插件mysql-connector时发现突然报了个错误:

  mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported

后来才知道,MySQL8和低版本不兼容,解决办法有两种:

  1. 把mysql8降级成低版本;
  2. 把认证的选项设置为“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);