python导出sql文件 python如何导出数据库数据_数据库


一.基础使用

第三方库pymysql

除了使用图形化工具以外,我们也可以使用编程语言来执行SQL从而操作数据库。在Python中,使用第三方库:pymysql来完成对MySQL数据库的操作。

安装


python导出sql文件 python如何导出数据库数据_python_02


创建到MySQL的数据库链接

具体代码如下


python导出sql文件 python如何导出数据库数据_数据库_03


from pymysql import Connect
#获取到MySQL数据库的连接对象
conn=Connect(
    host='localhost',# localhost表示自己的电脑
    user='root',
    password='685014',#这个密码是当时下载mysql自己设置的用户密码
    port=3306#端口默认是3306
)
#打印MySQL数据库软件信息
print(conn.get_server_info())

输出结果


python导出sql文件 python如何导出数据库数据_pymysql_04


执行SQL语句

演示

执行非查询性质的SQL语句:


python导出sql文件 python如何导出数据库数据_pymysql_05


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文件 python如何导出数据库数据_mysql_06


注意,在用python写SQL执行语句时,最后的‘;’分号可以不写

执行查询性质的SQL语句:


python导出sql文件 python如何导出数据库数据_数据库_07


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)

结果


python导出sql文件 python如何导出数据库数据_python导出sql文件_08


python导出sql文件 python如何导出数据库数据_pymysql_09


小结

1.Python中使用什么第三方库来操作MySQL?如何安装?

使用第三方库为:pymysql

安装:pip install pymysql

2.如何获取链接对象?

  • from pymysql import Connection导包
  • Connection(主机,端口,账户,密码)即可得到链接对象·链接对象.close()关闭和MySQL数据库的连接

3.如何执行SQL查询

通过连接对象调用cursor()方法,得到游标对象

  • 游标对象.execute()执行SQL语句
  • 游标对象.fetchall()得到全部的查询结果封装入元组内

二.数据插入

思考


python导出sql文件 python如何导出数据库数据_pymysql_10


如图所示代码,经过执行是无法将数据插入到数据表student中的。这是为什么呢?

pymysql在执行数据插入或其它产生数据更改的SQL语句时,默认是需要提交更改的,即,需要通过代码“确认”这种更改行为。

通过链接对象.commit()即可确认此行为。

自动commit

如果不想手动commit确认,可以在构建链接对象的时候,设置自动commit的属性。


python导出sql文件 python如何导出数据库数据_python_11


如图代码进行设置,即可自动提交无需手动commit了。

from pymysql import Connect
#获取到MySQL数据库的连接对象
conn=Connect(
    host="localhost",
    user="root",
    password="685014",
    port=3306,
    autocommit=True

)

小结

1.什么是commit提交?

pymysql库在执行对数据库有修改操作的行为时,是需要通过链接对象的commit成员方法来进行确认的。只有确认的修改,才能生效。

  1. 如何自动提交呢?


python导出sql文件 python如何导出数据库数据_数据库_12


三.实例操作

利用python把数据导入MySQL中


python导出sql文件 python如何导出数据库数据_pymysql_13


python导出sql文件 python如何导出数据库数据_python_14


python导出sql文件 python如何导出数据库数据_mysql_15


这两份数据,一份是json数据,一份是普通的文本

我在之前文章中就处理过这两份文件,需要了解的可点击“python面向对象做数据分析实例”所用的数据集也在这篇文章里面

这次我们就直接导入

操作

本次需求开发我们需要新建一个数据库来使用,数据库名称:py_sql基于数据结构,可以得到建表语句:


python导出sql文件 python如何导出数据库数据_pymysql_16


python导出sql文件 python如何导出数据库数据_python导出sql文件_17


python导出sql文件 python如何导出数据库数据_mysql_18


代码

#实例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()


python导出sql文件 python如何导出数据库数据_pymysql_19


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)

结果是


python导出sql文件 python如何导出数据库数据_python导出sql文件_20


法二

#实例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)

结果是


python导出sql文件 python如何导出数据库数据_python导出sql文件_21


法三(推荐使用)

#新方法 推荐使用
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导出sql文件 python如何导出数据库数据_pymysql_22


注:实例所用数据集请点击“python面向对象做数据分析实例”

python导出sql文件 python如何导出数据库数据_python_23