一.基础使用
第三方库pymysql
除了使用图形化工具以外,我们也可以使用编程语言来执行SQL从而操作数据库。在Python中,使用第三方库:pymysql来完成对MySQL数据库的操作。
安装
创建到MySQL的数据库链接
具体代码如下
from pymysql import Connect
#获取到MySQL数据库的连接对象
conn=Connect(
host='localhost',# localhost表示自己的电脑
user='root',
password='685014',#这个密码是当时下载mysql自己设置的用户密码
port=3306#端口默认是3306
)
#打印MySQL数据库软件信息
print(conn.get_server_info())
输出结果
执行SQL语句
演示
执行非查询性质的SQL语句:
from pymysql import Connect
#获取到MySQL数据库的连接对象
conn=Connect(
host='localhost',# localhost表示自己的电脑
user='root',
password='685014',#这个密码是当时下载mysql自己设置的用户密码
port=3306#端口默认是3306
)
#打印MySQL数据库软件信息
print(conn.get_server_info())
#执行非查询性质的SQL语句
#获取游标对象
cursor=conn.cursor()
conn.select_db("py_sql")#选择数据库
#使用游标对象,执行SQL语句
cursor.execute("create table test_pymysql(id int,info varchar(255));")
#关闭链接
conn.close()
结果
注意,在用python写SQL执行语句时,最后的‘;’分号可以不写
执行查询性质的SQL语句:
from pymysql import Connect
#获取到MySQL数据库的连接对象
conn=Connect(
host='localhost',# localhost表示自己的电脑
user='root',
password='685014',#这个密码是当时下载mysql自己设置的用户密码
port=3306#端口默认是3306
)
#执行查询性质的SQL语句
#获取游标对象
cursor=conn.cursor()
conn.select_db("world")#选择数据库
#使用游标对象,执行SQL语句
cursor.execute("select * from student")
#获取查询结果
result:tuple=cursor.fetchall()
for i in result:
print(i)
结果
小结
1.Python中使用什么第三方库来操作MySQL?如何安装?
使用第三方库为:pymysql
安装:pip install pymysql
2.如何获取链接对象?
- from pymysql import Connection导包
- Connection(主机,端口,账户,密码)即可得到链接对象·链接对象.close()关闭和MySQL数据库的连接
3.如何执行SQL查询
通过连接对象调用cursor()方法,得到游标对象
- 游标对象.execute()执行SQL语句
- 游标对象.fetchall()得到全部的查询结果封装入元组内
二.数据插入
思考
如图所示代码,经过执行是无法将数据插入到数据表student中的。这是为什么呢?
pymysql在执行数据插入或其它产生数据更改的SQL语句时,默认是需要提交更改的,即,需要通过代码“确认”这种更改行为。
通过链接对象.commit()即可确认此行为。
自动commit
如果不想手动commit确认,可以在构建链接对象的时候,设置自动commit的属性。
如图代码进行设置,即可自动提交无需手动commit了。
from pymysql import Connect
#获取到MySQL数据库的连接对象
conn=Connect(
host="localhost",
user="root",
password="685014",
port=3306,
autocommit=True
)
小结
1.什么是commit提交?
pymysql库在执行对数据库有修改操作的行为时,是需要通过链接对象的commit成员方法来进行确认的。只有确认的修改,才能生效。
- 如何自动提交呢?
三.实例操作
利用python把数据导入MySQL中
这两份数据,一份是json数据,一份是普通的文本
我在之前文章中就处理过这两份文件,需要了解的可点击“python面向对象做数据分析实例”所用的数据集也在这篇文章里面
这次我们就直接导入
操作
本次需求开发我们需要新建一个数据库来使用,数据库名称:py_sql基于数据结构,可以得到建表语句:
代码
#实例1 将数据导入mysql中
from shujufenxi import file_define
from shujufenxi import data_define
from pymysql import Connect
text_file_reader= file_define.TextFileReader("D:/2011年1月销售数据.txt")
json_file_reader= file_define.JsonFileReader("D:/2011年2月销售数据JSON.txt")
jan_data:list[data_define.Record]=text_file_reader.read_data()
fed_data:list[data_define.Record]=json_file_reader.read_data()
#把两个月的数据合并为一个list来存储
all_data:list[data_define.Record]= jan_data + fed_data
#获取到MySQL数据库的连接对象
conn=Connect(
host="localhost",
user="root",
password="685014",
port=3306,
autocommit=True
)
#获取游标对象
cursor=conn.cursor()
#选择数据库
conn.select_db("py_sql")
#组织SQL语句
for record in all_data:
sql=f"insert into orders(order_data,order_id,money,province)" \
f"values('{record.data}','{record.order_id}','{record.money}','{record.province}')"
#执行SQL语句
cursor.execute(sql)
#关闭连接
conn.close()
2.利用python把数据从MySQL中导出
法一
#第一种方法(输出元组)
from pymysql import Connect
conn=Connect(
host="localhost",
user="root",
password="685014",
port=3306
)
cursor=conn.cursor()
conn.select_db("py_sql")
cursor.execute("select order_data,order_id,money,province from orders limit 12")
record=cursor.fetchall()
for i in record:
print(i)
print(record)
结果是
法二
#实例2 把数据导出(这个是老方法,会报错但是也可以正常输出)
from pymysql import Connect
import pandas as pd
#获取到MySQL数据库的连接对象
conn=Connect(
host="localhost",
user="root",
password="685014",
port=3306,
autocommit=True
)
#选择数据库
conn.select_db("py_sql")
#获取游标对象
cursor=conn.cursor()
#组织SQL语言
sql=f"select order_data,order_id,money,province from orders limit 12;"
# #执行sql语言
record=pd.read_sql(sql,conn)
print(record)
结果是
法三(推荐使用)
#新方法 推荐使用
import sqlalchemy
import pandas as pd
conn=sqlalchemy.create_engine("mysql+pymysql://root:685014@localhost:3306/py_sql")
sql=f"select order_data,order_id,money,province from orders limit 12;"#这里那个f写不写都可以
record=pd.read_sql(sql,conn)
print(record)
结果是
注:实例所用数据集请点击“python面向对象做数据分析实例”