一、下载安装
直接按步骤下载安装即可。
首先下载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
连接名自行命名(不能相同),输入密码,先进行连接测试,再选择确定。
连接成功后会显示连接名,此时是灰色图标。
双击开始出现各种表信息等。
3.navicat创建表
查询里的新建查询用来自己编辑sql语句。
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上的显示如下图:
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运行结果如下:
navicat上显示如下:
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上显示如下:
修改插入语句后,修改后部分新语句如下:
sql="INSERT INTO ZY2(id,name,address)VALUES(%s,%s,%s)" #插入第一行信息数据
val=("2","RUNOOB","https://www.runoob.com") #插入行的值
mycursor.execute(sql,val) #执行插入语句
再执行后navicat上显示如下:
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地址了。
批量插入数据前,数据库是这样的:
插入语句只需修改插入的信息代码语句即可,其他不变:
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, "记录插入成功。")
插入前:
插入后:
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运行结果如下:
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)
输出结果如下:
也可以使用%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运行结果如下:
4.9Limit
如果我们要设置查询的数据量,可以通过 “LIMIT” 语句来指定:
#limit
mycursor.execute("SELECT * FROM zy2 LIMIT 3")
myresult = mycursor.fetchall()
for x in myresult:
print(x)
Pycharm运行结果如下:
也可以指定起始位置,使用的关键字是 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运行结果如下:
navicat显示如下:
也可以使用 %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运行结果如下:
navicat显示如下:
使用占位符%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:
删之后的navicat:
最后尝试了一下之前失败的批量插入数据,这次成功了,详见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, "记录插入成功。")