一、下载安装

直接按步骤下载安装即可。

pymysql连接mysql设置连接池 mysql连接pycharm_pymysql连接mysql设置连接池


首先下载navicat,一直next操作,在安装过程中需要注意安装路径,这里我安装在C:\Program Files (x86)\PremiumSoft\Navicat for MySQL下。

当navicat安装完毕之后,双击打开PathNavicat,选择C:\Program Files (x86)\PremiumSoft\Navicat for MySQL下的navicat.exe打开即可。此时打开navicat会发现没有试用提醒。

2.连接mysql

连接名自行命名(不能相同),输入密码,先进行连接测试,再选择确定。

pymysql连接mysql设置连接池 mysql连接pycharm_mysql_02


pymysql连接mysql设置连接池 mysql连接pycharm_pymysql连接mysql设置连接池_03


连接成功后会显示连接名,此时是灰色图标。

pymysql连接mysql设置连接池 mysql连接pycharm_pymysql连接mysql设置连接池_04


双击开始出现各种表信息等。

pymysql连接mysql设置连接池 mysql连接pycharm_pymysql连接mysql设置连接池_05

3.navicat创建表

查询里的新建查询用来自己编辑sql语句。

pymysql连接mysql设置连接池 mysql连接pycharm_python_06


pymysql连接mysql设置连接池 mysql连接pycharm_sql_07

4.Pycharm使用Python语句连接mysql

我们可以使用Pycharm中的mysql.connector模块(需先在setting下载此模块),连接mysql,连接新建数据库,创建表等。
4.1创建数据库
创建数据库使用 “CREATE DATABASE” 语句,以下创建一个名为 runoob_db 的数据库。

import mysql.connector
 
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="123456"
)
 
mycursor = mydb.cursor()
 
mycursor.execute("CREATE DATABASE runoob_db")

4.2查看数据库
创建数据库前我们也可以使用 “SHOW DATABASES” 语句来查看数据库是否存在。

import mysql.connector
 
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="123456"
)
 
mycursor = mydb.cursor()
 
mycursor.execute("SHOW DATABASES")
 
for x in mycursor:
  print(x)

navicat上的显示如下图:

pymysql连接mysql设置连接池 mysql连接pycharm_数据库_08

4.3新建数据库
新建一个名为zy2的数据表,代码如下:

import mysql.connector
a=mysql.connector.connect(           #创建连接mysql
    host='192.168.0.102',            #自己电脑的ip地址
    user='root',
    passwd='123456',
    database="runoob_db"               #连接名为runoob_db的数据库
#    auth_plugin='mysql_native_password'   #假如有报错,就加此句代码。报错信息:mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
)
print(a)
mycursor=a.cursor()       #获取连接的cursor(游标对象),只有获取了cursor,我们才能进行各种操作
mycursor.execute("CREATE TABLE zy2(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")  #设置主键(PRIMARY KEY)、数据表有三个列,其中id为主键
mycursor.execute("SHOW TABLES")     #查看数据表,是用下面的for循环遍历数据库里的表
for x in mycursor:
    print(x)

执行此代码,Pycharm运行结果如下:

pymysql连接mysql设置连接池 mysql连接pycharm_sql_09


navicat上显示如下:

pymysql连接mysql设置连接池 mysql连接pycharm_pymysql连接mysql设置连接池_10


4.4插入数据

插入数据使用 “INSERT INTO” 语句。(在上面代码基础上修改,此处是id为主键,插入数据时只用插其他列即可,主键上插入数据后会自动排1,2,3…)

import mysql.connector
a=mysql.connector.connect(           #创建连接mysql
    host='192.168.0.102',            #自己电脑的ip地址
    user='root',
    passwd='123456',
    database="runoob_db"               #连接名为runoob_db的数据库
#    auth_plugin='mysql_native_password'   #有报错,加了此句代码。报错信息:mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
)
print(a)
mycursor=a.cursor()       #获取连接的cursor(游标对象),只有获取了cursor,我们才能进行各种操作

#创建数据表并显示数据表的语句
#mycursor.execute("CREATE TABLE zy2(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")  #设置主键、数据表有三个列
#mycursor.execute("SHOW TABLES")     #查看数据表,是用下面的for循环遍历数据库里的表
#for x in mycursor:
#    print(x)

#插入数据使用“INSERT INTO”语句
sql="INSERT INTO ZY2(name,address)VALUES(%s,%s,%s)"     #插入第一行信息数据
val=("RUNOOB","https://www.runoob.com")         #插入行的值
mycursor.execute(sql,val)               #执行插入语句
a.commit()                          #数据表有更新,必须使用该语句
print(mycursor.rowcount,"记录插入成功")      #rowcount获取插入数据此行数

navicat上显示如下:

pymysql连接mysql设置连接池 mysql连接pycharm_python_11


修改插入语句后,修改后部分新语句如下:

sql="INSERT INTO ZY2(id,name,address)VALUES(%s,%s,%s)"     #插入第一行信息数据
val=("2","RUNOOB","https://www.runoob.com")         #插入行的值
mycursor.execute(sql,val)               #执行插入语句

再执行后navicat上显示如下:

pymysql连接mysql设置连接池 mysql连接pycharm_sql_12


4.5尝试批量插入数据

由于是我重启电脑之后进行操作,发现Pycharm运行时连接mysql报错,报错信息如下:mysql.connector.errors.InterfaceError: 2003: Cant connect to MySQL server on 我的ip地址(10060),网上尝试各种方式没有解决,可以确认的是ping网络是通的,端口3306也在开,防火墙虽然在开,但是尝试关掉之后依旧不起作用,针对2003-10060错误,有想法的大佬可以沟通分享一下想法。

最后重启电脑改了连接mysql的一句代码,修改后代码host='localhost',突然能运行了,我也不知道为啥,只是单纯的不加自己ip地址了。

批量插入数据前,数据库是这样的:

pymysql连接mysql设置连接池 mysql连接pycharm_数据库_13

插入语句只需修改插入的信息代码语句即可,其他不变:

sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = [
  ('Google', 'https://www.google.com'),
  ('Github', 'https://www.github.com'),
  ('Taobao', 'https://www.taobao.com'),
  ('stackoverflow', 'https://www.stackoverflow.com/')
]

但是,没成功,报错如下:mysql.connector.errors.ProgrammingError: Failed processing format-parameters; Python 'tuple' cannot be converted to a MySQL type。网上搜信息很少,也不知道咋解决,目前只能实现单独插入数据。

注意:
此段解决批量插入数据的问题本应放在文章的最后,被我挪过来了。
关于上面这个无法批量插入数据的问题,我最后抱着试一试的心态又尝试了下,成功插入进去了。发现使用的是executemany()方法。代码如下:

#批量插入数据
sql = "INSERT INTO zy2 (name, address) VALUES (%s, %s)"
val = [   #列表里嵌套元组
    ('Googles', 'https://www.google.com'),
    ('Github', 'https://www.github.com'),
    ('Taobao', 'https://www.taobao.com'),
    ('stackoverflow', 'https://www.stackoverflow.com/')
]
mycursor.executemany(sql, val)    #注意区别
a.commit()  # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount, "记录插入成功。")

插入前:

pymysql连接mysql设置连接池 mysql连接pycharm_python_14


插入后:

pymysql连接mysql设置连接池 mysql连接pycharm_sql_15

4.6查询数据
使用select语句进行查询。fetchall用来获取全部数据。如果我们只想读取一条数据,可以使用 fetchone() 方法获取第一行数据。也可以读取指定的字段数据,只需要把下面代码中的mycursor.execute("SELECT * FROM zy2")修改为mycursor.execute("SELECT name, address FROM zy2"),此时只获取name和address:

import mysql.connector
a=mysql.connector.connect(           #创建连接mysql
    host='localhost',            #自己电脑的ip地址
    user='root',
    passwd='123456',
    database="runoob_db",               #连接名为runoob_db的数据库
#    auth_plugin='mysql_native_password'   #有报错,加了此句代码。报错信息:mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
)
print(a)
mycursor=a.cursor()       #获取连接的cursor(游标对象),只有获取了cursor,我们才能进行各种操作

#创建数据表并显示数据表的语句
#mycursor.execute("CREATE TABLE zy2(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")  #设置主键、数据表有三个列
#mycursor.execute("SHOW TABLES")     #查看数据表,是用下面的for循环遍历数据库里的表
#for x in mycursor:
#    print(x)

#插入数据使用“INSERT INTO”语句
#sql="INSERT INTO zy2(name,address)VALUES(%s,%s)"     #插入第一行信息数据
#val=('Github', 'https://www.github.com')     #插入数据
#mycursor.execute(sql,val)               #执行插入语句
#a.commit()                          #数据表有更新,必须使用该语句
#print(mycursor.rowcount,"记录插入成功")

#查询数据
mycursor.execute("SELECT * FROM zy2")
myresult=mycursor.fetchall()     #fetchall用来获取
for x in myresult:
    print(x)

此时Pychram运行结果如下:

pymysql连接mysql设置连接池 mysql连接pycharm_数据库_16


4.7 where语句

where用来对数据进行筛选,输出指定数据。

部分代码如下:

#where条件语句
mycursor.execute("SELECT * FROM zy2 WHERE name='Googles'")   #也可使用通配符%: "SELECT * FROM zy2 WHERE name LIKE '%oog%'",(因为runoob也有oo,在此用oog)
myresult=mycursor.fetchall()
for x in myresult:
    print(x)

输出结果如下:

pymysql连接mysql设置连接池 mysql连接pycharm_sql_17


也可以使用%s占位符得出同样结果:

#where条件语句
mycursor.execute("SELECT * FROM zy2 WHERE name=%s",('Googles',))    #元组只有一个元素时加逗号
myresult=mycursor.fetchall()
for x in myresult:
    print(x)

4.8排序
查询结果排序可以使用 ORDER BY 语句,默认的排序方式为升序,关键字为 ASC,如果要设置降序排序,可以设置关键字 DESC。
代码如下(降序语句为:sql = "SELECT * FROM zy2 ORDER BY name DESC"):

#排序
sql = "SELECT * FROM zy2 ORDER BY name"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
    print(x)

Pycharm运行结果如下:

pymysql连接mysql设置连接池 mysql连接pycharm_python_18


4.9Limit

如果我们要设置查询的数据量,可以通过 “LIMIT” 语句来指定:

#limit
mycursor.execute("SELECT * FROM zy2 LIMIT 3")
myresult = mycursor.fetchall()
for x in myresult:
    print(x)

Pycharm运行结果如下:

pymysql连接mysql设置连接池 mysql连接pycharm_mysql_19


也可以指定起始位置,使用的关键字是 OFFSET,只需改一句为:mycursor.execute("SELECT * FROM sites LIMIT 3 OFFSET 1") # 0 为 第一条,1 为第二条,以此类推。从第二条开始读取前 3 条记录。4.10 删除记录

删除记录使用 “DELETE FROM” 语句:

删除name为RUNOOB的数据。

#删除记录
sql = "DELETE FROM zy2 WHERE name = 'RUNOOB'"
mycursor.execute(sql)
a.commit()
print(mycursor.rowcount, " 条记录删除")

Pycharm运行结果如下:

pymysql连接mysql设置连接池 mysql连接pycharm_mysql_20


navicat显示如下:

pymysql连接mysql设置连接池 mysql连接pycharm_sql_21


也可以使用 %s 占位符来转义删除语句的条件,结果是相同的:

sql = "DELETE FROM zy2 WHERE name = %s"
na = ("RUNOOB", )
mycursor.execute(sql, na) 
mydb.commit()
print(mycursor.rowcount, " 条记录删除")

4.11更新表数据
数据表更新使用 “UPDATE” 语句:

#更新数据表
sql = "UPDATE zy2 SET name = 'Google' WHERE name = 'Googles'"
mycursor.execute(sql)
a.commit()
print(mycursor.rowcount, " 条记录被修改")

Pycharm运行结果如下:

pymysql连接mysql设置连接池 mysql连接pycharm_pymysql连接mysql设置连接池_22


navicat显示如下:

pymysql连接mysql设置连接池 mysql连接pycharm_mysql_23


使用占位符%s也一样:

sql = "UPDATE zy2 SET name = %s WHERE name = %s"
val = ("Google", "Googles")
mycursor.execute(sql, val)
mydb.commit() 
print(mycursor.rowcount, " 条记录被修改")

4.12删除表
删除表使用 “DROP TABLE” 语句, IF EXISTS 关键字是用于判断表是否存在,只有在存在的情况才删除,这里我删除一个zy1表:

#删除表
sql = "DROP TABLE IF EXISTS zy1"  # 删除数据表 sites
mycursor.execute(sql)

删之前的navicat:

pymysql连接mysql设置连接池 mysql连接pycharm_pymysql连接mysql设置连接池_24


删之后的navicat:

pymysql连接mysql设置连接池 mysql连接pycharm_sql_25


最后尝试了一下之前失败的批量插入数据,这次成功了,详见4.5。

完整代码:

import mysql.connector
a=mysql.connector.connect(           #创建连接mysql
    host='localhost',            #自己电脑的ip地址
    user='root',
    passwd='123456',
    database="runoob_db",               #连接名为runoob_db的数据库
#    auth_plugin='mysql_native_password'   #有报错,加了此句代码。报错信息:mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
)
print(a)
mycursor=a.cursor()       #获取连接的cursor(游标对象),只有获取了cursor,我们才能进行各种操作

#创建数据表并显示数据表的语句
#mycursor.execute("CREATE TABLE zy2(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")  #设置主键、数据表有三个列
#mycursor.execute("SHOW TABLES")     #查看数据表,是用下面的for循环遍历数据库里的表
#for x in mycursor:
#    print(x)

#插入数据使用“INSERT INTO”语句
#sql="INSERT INTO zy2(name,address)VALUES(%s,%s)"     #插入第一行信息数据
#val=('Github', 'https://www.github.com')     #插入数据
#mycursor.execute(sql,val)               #执行插入语句
#a.commit()                          #数据表有更新,必须使用该语句
#print(mycursor.rowcount,"记录插入成功")

#查询数据
#mycursor.execute("SELECT * FROM zy2")
#myresult=mycursor.fetchall()
#for x in myresult:
#    print(x)

#where条件语句
#mycursor.execute("SELECT * FROM zy2 WHERE name=%s",('Googles',))
#myresult=mycursor.fetchall()
#for x in myresult:
#    print(x)

#排序
#sql = "SELECT * FROM zy2 ORDER BY name"
#mycursor.execute(sql)
#myresult = mycursor.fetchall()
#for x in myresult:
#    print(x)

#limit
#mycursor.execute("SELECT * FROM zy2 LIMIT 3")     #默认是从1到3
#myresult = mycursor.fetchall()
#for x in myresult:
#    print(x)

#删除记录
#sql = "DELETE FROM zy2 WHERE name = 'RUNOOB'"
#mycursor.execute(sql)
#a.commit()
#print(mycursor.rowcount, " 条记录删除")

#更新数据表
#sql = "UPDATE zy2 SET name = 'Google' WHERE name = 'Googles'"
#mycursor.execute(sql)
#a.commit()
#print(mycursor.rowcount, " 条记录被修改")

#删除表
sql = "DROP TABLE IF EXISTS zy1"  # 删除数据表 sites
mycursor.execute(sql)

#批量插入数据
sql = "INSERT INTO zy2 (name, address) VALUES (%s, %s)"
val = [
    ('Googles', 'https://www.google.com'),
    ('Github', 'https://www.github.com'),
    ('Taobao', 'https://www.taobao.com'),
    ('stackoverflow', 'https://www.stackoverflow.com/')
]
mycursor.executemany(sql, val)
a.commit()  # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount, "记录插入成功。")