查看原文
其他

30分钟入门Python操作MySQL

The following article is from 疯狂软件李刚 Author 疯狂软件李刚


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

  安装MySQL数据库模块 



安装模块使用如下命令:
pip install packagename

在命令行窗口中输入如下命令:
pip install mysql-connector-python

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

上面信息提示该模块安装成功。
如果希望指定安装不同版本的模块,也可指定版本号。例如:
pip install packagename ==1.0.4     # 安装指定版本

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


  执行DDL语句



在使用mysql-connector-python模块操作MySQL数据库之前,同样先检查一下该模块的全局属性。
>>> 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个数据表。
# 导入访问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数据库。
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语句,这样即可向数据库插入、修改和删除数据。
例如如下程序示范了向数据库的两个数据表分别插入一条数据。
# 导入访问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语句。例如如下程序。
# 导入访问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()方法来提交事务。例如如下程序。
# 导入访问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()方法来提交事务。

——相关好书推荐——

《疯狂Python讲义》

李刚 编著
  • 从零开始Python编程从入门到实践一网打尽

  • 覆盖的知识面广,知识体系完备、系统

本书既是一本适合初学者入门Python的图书(一个8岁的小朋友在未出版前已学习了本书很多章节并动手写出了自己的程序);这也是一本适合Python就业的图书,因为本书涵盖了网络编程、数据分析、网络爬虫等大量企业实用的知识。本书为所有打算深入掌握Python编程的读者而编写,适合各种层次的Python学习者和工作者阅读,也适合作为大学教育、培训机构的Python教材。

(扫码了解本书详情)




李刚老师 好课推荐这不是普通的录播课,更不是单纯念PPT,是真实课堂教学,有互动,更有听课氛围。李刚老师在课程中现场编写程序,一步一步的告诉你,要做什么,为什么,怎么来,应怎么做,还能怎么做,让你完全明白这些Java体系的前世今生!更有课堂学生提问,会在大家普遍难以理解的地方做出解答,不需要自己事后研究,闭门造车。

扫描下方二维码立即报名,跟着李刚学Java,再也不用从网上下载程序、copy代码了,自己编写更带感!

(扫码报名)



不想报名也没有关系添加下方小橘子微信,回复“免费20+门精品课程免费等你拿


如果喜欢本文欢迎 在看留言分享至朋友圈 三连

  热文推荐  





▼点击阅读原文,获取本书详情!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存