前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >30分钟入门Python操作MySQL

30分钟入门Python操作MySQL

作者头像
博文视点Broadview
发布2020-06-12 16:31:18
1.1K0
发布2020-06-12 16:31:18
举报
文章被收录于专栏:博文视点Broadview

小编说:人生苦短,我用Python,使用Python可以操作各种主流的数据库,本文作者李刚,带你快速入门用Python操作MySQL数据库。

安装MySQL数据库模块

安装模块使用如下命令:

代码语言:javascript
复制
pip install packagename

在命令行窗口中输入如下命令:

代码语言:javascript
复制
pip install mysql-connector-python

运行该命令将可看到程序下载、并安装mysql-connector-python模块的过程,最后会生成如下一条提示信息。

代码语言:javascript
复制
Successfully installed mysql-connector-python-8.0.11

上面信息提示该模块安装成功。

如果希望指定安装不同版本的模块,也可指定版本号。例如:

代码语言:javascript
复制
pip install packagename ==1.0.4     # 安装指定版本

提示:除了使用MySQL官方提供的Python模块来连接MySQL数据库之外,还有一个广泛使用的连接MySQL的模块:MySQL-python,其官方站点为:https://pypi.org/project/MySQL-python/。

执行DDL语句

在使用mysql-connector-python模块操作MySQL数据库之前,同样先检查一下该模块的全局属性。

代码语言:javascript
复制
>>> import mysql.connector
>>> mysql.connector.apilevel
'2.0'
>>> mysql.connector.paramstyle
'pyformat'
>>>

从上面输出可以看到,mysql-connector数据库模块同样遵守DB API 2.0规范,且该模块允许在SQL语句中使用扩展的格式代码(pyformat)来代表参数。

使用MySQL模块向MySQL数据库执行DDL语句与使用SQLite模块向SQLite执行DDL语句并没有太大的区别,需要注意的区别在于:MySQL数据库有服务器进程、默认通过3306端口对外提供服务,因此Python程序连接MySQL数据库时可指定远程服务器IP地址和端口,如果不指定服务器IP地址和端口,则使用默认服务器IP地址:localhost和默认端口:3306。

下面程序示范了如何连接MySQL数据库,并通过DDL语句来创建2个数据表。

代码语言:javascript
复制
# 导入访问MySQL的模块
import mysql.connector

# ①、连接数据库
conn = mysql.connector.connect(user='root', password='32147',
    host='localhost', port='3306',
    database='python', use_unicode=True)
# ②、获取游标
c = conn.cursor()
# ③、执行DDL语句创建数据表
c.execute('''create table user_tb(
  user_id int primary key auto_increment,
  name varchar(255),
  pass varchar(255), 
  gender varchar(255))''')
# 执行DDL语句创建数据表
c.execute('''create table order_tb(
  order_id integer primary key auto_increment,
  item_name varchar(255),
  item_price double,
    item_number double,
  user_id int,
    foreign key(user_id) references user_tb(user_id) )''')
# ④、关闭游标
c.close()
# ⑤、关闭连接
conn.close()

上面程序最大的关键就在于第5、6、7行代码:程序要连接localhost主机上3306端口服务的python数据库,因此该程序要求必须先在本机的MySQL数据库服务器上创建一个python数据库。

通过开始菜单的“MySQL → MySQL Server 8.0 → MySQL 8.0 Command Line Client - Unicode”启动MySQL的命令行客户端,输入root账户的密码即可进入MySQL的命令行客户端,然后在该客户端中输入如下命令来创建python数据库。

代码语言:javascript
复制
create database python;

接下来运行上面程序,程序运行结束后将可以看到python数据库中多了2个数据表。如图1所示。

图1 创建数据表

上面程序中①、②、③、④、⑤步的步骤就是Python连接数据库的固定步骤,几乎连接所有数据库大致都是这样几步,程序在第③步执行了2次,每次分别执行一条create语句,因此该程序执行完成后将会看到当前数据库中包含2个数据表:user_tb和order_tb,且order_tb中有个外键列引用user_tb表的user_id主键列。

需要指出的是,此处程序使用execute()方法执行的create语句与前面操作SQLite数据库所使用的create语句略有差异,但这个差异是两个数据库本身所引起的,与Python程序并没有任何关系。

如果当Python程序提示某条SQL语句有语法错误时,最好先利用此处介绍的MySQL客户端先测试这条语句,以保证这条SQL语句的语法正确。

提示:同一条SQL语句,在有的数据库上可能是可以成功的,但在其他数据库上可能会失败,这是由于不同数据库之间虽然大体是相同的,但在实现细节上略有差异。

执行DML语句

与使用SQLite数据库模块类似,MySQL数据库模块同样可使用游标的execute()方法也可执行DML语句的insert、update、delete语句,这样即可向数据库插入、修改和删除数据。

例如如下程序示范了向数据库的两个数据表分别插入一条数据。

代码语言:javascript
复制
# 导入访问MySQL的模块
import mysql.connector

# ①、连接数据库
conn = mysql.connector.connect(user='root', password='32147',
    host='localhost', port='3306',
    database='python', use_unicode=True)
# ②、获取游标
c = conn.cursor()
# ③、调用执行insert语句插入数据
c.execute('insert into user_tb values(null, %s, %s, %s)',
    ('孙悟空', '123456', 'male'))
c.execute('insert into order_tb values(null, %s, %s, %s, %s)',
    ('鼠标', '34.2', '3', 1))
conn.commit()
# ④、关闭游标
c.close()
# ⑤、关闭连接
conn.close()

上面程序第11和第13代码分别用于向user_tb、order_tb表中插入数据记录,注意该程序的SQL语句中的占位符:%s,这正如mysql.connector.paramstyle属性所标识的:pyformat,它指定在SQL语句中使用扩展的格式代码来作为占位符。

运行上面程序之后就会向两个python数据库的两个数据表各插入一条记录。打开MySQL的命令行客户端可如图2所示的数据。

图2 执行insert语句插入数据

与SQLite数据模块类似的是,MySQL数据库模块同样支持使用executemany()方法重复执行一条SQL语句。例如如下程序。

代码语言:javascript
复制
# 导入访问MySQL的模块
import mysql.connector

# ①、连接数据库
conn = mysql.connector.connect(user='root', password='32147',
    host='localhost', port='3306',
    database='python', use_unicode=True)
# ②、获取游标
c = conn.cursor()
# ③、调用executemany()方法把同一条SQL语句执行多次
c.executemany('insert into user_tb values(null, %s, %s, %s)',
    (('sun', '123456', 'male'),
    ('bai', '123456', 'female'),
    ('zhu', '123456', 'male'),
    ('niu', '123456', 'male'),
    ('tang', '123456', 'male')))
conn.commit()
# ④、关闭游标
c.close()
# ⑤、关闭连接
conn.close()

该程序与前面使用SQLite数据模块重复执行SQL语句的程序基本相同,只是该程序在SQL语句中使用%s作为占位符。

使用MySQL数据库模块中游标的executemany()方法同样可重复执行update、delete语句,这完全是允许的。

需要说明是,MySQL数据库模块的连接对象有一个autocommit属性,如果将该属性设为True,那意味着关闭该连接的事务支持,程序每次执行DML语句之后都会自动提交,这样程序就无需调用连接对象的commit()方法来提交事务。例如如下程序。

代码语言:javascript
复制
# 导入访问MySQL的模块
import mysql.connector
# ①、连接数据库
conn = mysql.connector.connect(user='root', password='32147',
    host='localhost', port='3306',
    database='python', use_unicode=True)
# 将autocommit设置True,关闭事务
conn.autocommit = True
#  下面执行的DML语句会自动提交
...
# ④、关闭游标
c.close()
# ⑤、关闭连接
conn.close()

上面程序中将连接对象的autocommit设为True,这意味着该连接将会自动提交每条DML语句,这就相当于关闭了事务,所以程序也不需要调用连接对象的commit()方法来提交事务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档