本篇文章使用 mysql-connector 来连接使用 MySQL, mysql-connector 是 MySQL 官方提供的驱动器。
我们可以使用 pip 命令来安装 mysql-connector:
python -m pip install mysql-connector //cmd界面执行
使用以下代码测试是否安装成功
import mysql.connector //如果没有报错说明安装成功
**注意:**如果你的MySQL是8.0版本,则需要修改加密规则,否则后面连接数据库时会报错,详情请参照Navicat连接mysql报错 1251错误
创建数据库连接
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
)
创建数据库
创建数据库使用create database语句,下面创建一个名为learning的数据库
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
my_cursor.execute("create database learning") #使用execute方法执行sql语句
查看所有数据库
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
my_cursor.execute("show databases") #使用execute方法执行sql语句
for i in my_cursor: #使用for循环打印每个数据库
print(i)
现在有了数据库,我们可以直接连接数据库,只需在connect中配置一条语句
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
创建数据表
创建数据表使用create table语句,创建数据表前,需要确保数据库已存在,以下创建一个名为 users 的数据表:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
my_cursor.execute("create table users (name varchar(20), age int, male varchar(20) )") #使用execute方法执行sql语句
执行成功后可以看到数据库中多了一张users表
创建表的时候我们一般都会设置一个主键(PRIMARY KEY),我们可以使用 “INT AUTO_INCREMENT PRIMARY KEY” 语句来创建一个主键,主键起始值为 1,逐步递增。
如果我们的表已经创建,我们需要使用 ALTER TABLE 来给表添加主键:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
my_cursor.execute("ALTER TABLE users ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY") #使用execute方法执行sql语句
插入数据
插入数据使用 insert into语句:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
my_cursor.execute("insert into users(name, age, male) values('admin', '20', 'M')") #使用execute方法执行sql语句
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(my_cursor.rowcount, "条记录已更新") #rowcount方法返回sql语句执行后影响的行数
输出结果为
1 条记录已更新
如果我们想在数据记录插入后,获取该记录的 ID ,可以使用以下代码:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
my_cursor.execute("insert into users(name, age, male) values('admin', '20', 'M')") #使用execute方法执行sql语句
mydb.commit() # 数据表内容有更新,必须使用到该语句
print("1 条记录已插入, ID:", my_cursor.lastrowid)
结果为
1 条记录已插入, ID: 3
查询数据
查询数据使用 select 语句:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
my_cursor.execute("select * from users") #使用execute方法执行sql语句
result = my_cursor.fetchall() #fetchall()方法获取全部数据
for i in my_cursor:
print(i)
删除记录
删除记录使用 delete from 语句:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
sql = "delete from users where id=1"
my_cursor.execute(sql) #使用execute方法执行sql语句
mydb.commit() # 数据表内容有更新,必须使用到该语句
为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义删除语句的条件:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
sql = "delete from users where id=%s"
val = (2,)
my_cursor.execute(sql,val) #使用execute方法执行sql语句
mydb.commit()
print(my_cursor.rowcount, "条记录已删除")
更新表数据
数据表更新使用 update 语句
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
sql = "update users set name='root' where name='admin' " #把admin的名字改为root
my_cursor.execute(sql) #使用execute方法执行sql语句
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(my_cursor.rowcount, "条记录已更新")
为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义更新语句的条件:
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
sql = "update users set name=%s where name=%s " #把admin的名字改为root
val = ('root', 'admin')
my_cursor.execute(sql, val) #使用execute方法执行sql语句
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(my_cursor.rowcount, "条记录已更新")
删除表
删除表使用 drop table 语句
# 导入模块
import mysql.connector
# 创建数据库连接
mydb = mysql.connector.connect(
host='localhost', #数据库地址
user='root', #数据库用户名
passwd='your—passwd', #数据库密码
database='learning', #配置数据库名
)
my_cursor = mydb.cursor() #使用cursor方法获取操作游标
sql = "drop table users"
my_cursor.execute(sql) #使用execute方法执行sql语句