内容简介:01 前言Python链接数据库的方式有几种,但是原理都是一样的,总共可以分为两个步骤,第一步是与数据库建立链接,第二步执行sql查询语句,这篇将分别介绍如何与数据库链接以及如何进行sql语句查询。
01 前言
Python链接数据库的方式有几种,但是原理都是一样的,总共可以分为两个步骤,第一步是与数据库建立链接,第二步执行 sql 查询语句,这篇将分别介绍如何与数据库链接以及如何进行sql语句查询。
02 与数据库进行链接
在与数据库进行链接时,主要用到两种方法,一种是pymysql.connect,另一种是create_engine。
-
pymysql.connect
pymysql是 python 自带的一个库,使用前需要使用pip install pymysql安装这个库,安装完以后使用该库中的connect方法可以直接与数据库进行链接。
# 方法一: 使用pymsql.connect方法
import pymysql
# Connect to the database
eng = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8')
# user:用户名
# password:密码
# host:数据库地址/本机使用localhost
# db:数据库名
# charset:数据库编码
# 连接sample
# charset='utf8'是解决中文乱码
eng=pymysql.connect(host="118.190.xxx.xxx",user="zhangjian",password="ZhangJian",db="demo",charset='utf8')
这样就将python与数据库进行了链接,接下来执行sql查询语句就可以将数据库中的内容读取到python中。
-
create_engine
create_engine是sqlarchemy包内的一个模块,而sqlarchemy是Python下的一款ORM框架,建立在数据库API之上,使用关系对象映射进行数据库操作,将对象转换成SQL,使用数据库API执行SQL并获取执行结果。
ORM是Object Relational Mapper ,是一种对象映射关系程序,比较难解释,大家有兴趣的自己去了解一下,这里只分享如何使用这个进行链接。
# 方法二: 使用create_engine方法
from sqlarchemy import create_engine
create_engine("mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]")
# mysql:数据库类型
# pymysql:驱动器类型
# username:用户名
# password:密码
# host:数据库地址/本机使用localhost
# dbname:数据库名
# options:数据库编码格式如:charset=utf8
# 连接sample
eng = create_engine("mysql+pymysql://zhangjian:ZhangJian@118.190.xxx.xxx:3306/demo?charset=utf8")
03 执行sql语句
# 方法一:使用pd.read_sql() 主要参数如下所示
pd.read_sql(
sql, #需要使用的sql语句或者数据表
con, #sqlalchemy连接引擎名称
index_col = None, #将被用作索引的名称
columns = None #当sql参数使用的是表名称是,指定需要读入的列,使用list提供
)
# 方法二:使用pd.read_sql_query 主要参数如下所示
pd.read_sql(
sql, #完整的sql语句
con, #sqlalchemy连接引擎名称
index_col = None, #将被用作索引的名称
columns = None #当sql参数使用的是表名称是,指定需要读入的列,使用list提供
)
# 方法三:使用pd.read_sql_table 主要参数如下所示
pd.read_sql(
table, #表名称
con, #sqlalchemy连接引擎/或者连接名称
index_col = None, #将被用作索引的名称
columns = None #当sql参数使用的是表名称是,指定需要读入的列,使用list提供
)
# 从以上方法可看出,read_sql()方法已经打包了read_sql_table() 与 read_sql_query()的所有功能,推荐直接使
用read_sql()方法
pd.read_sql()方法读取数据文件
import pandas as pd
from sqlalchemy import create_engine
eng = create_engine("mysql+pymysql://zhangjian:ZhangJian*2018@118.190.000.111:3306/demo?charset=gbk")
data = pd.read_sql(sql = 'select * from orderitem limit 10',con=eng,index_col='SDate')
data
# 输入正确的数据库新信息后,read_sql方法返回的是我们熟悉的数据框结构,可以方便浏览数据,如需查看汇总信息,修改sql语句即可。
▲(点击可查看大图)
# read_sql()方法sql参数使用表名称
from sqlalchemy import create_engine
import pandas as pd
eng = create_engine("mysql+pymysql://zhangjian:ZhangJian*2018@118.190.000.111:3306/demo?charset=gbk")
data = pd.read_sql(sql = "category",con=eng)
# 此方法会读取指定表中的全部数据,如果表数据量比较大,会造成读取数据慢,慎用。
# 修改改数据库密码后重新连接数据库
# 如用户名,密码,数据库名称包含% @等特殊字符串报错如下所示:报错关键信息1045
eng = create_engine("mysql+pymysql://账号:密码@118.190.000.111:3306/demo?charset=gbk")
data = pd.read_sql(sql = 'select * from orderitem limit 10',con=eng)
data
OperationalError Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py in _wrap_pool_connect(self, fn, connection)
2157 try:
-> 2158 return fn()
2159 except dialect.dbapi.Error as e:
▲(点击可查看大图)
# 用户名,密码,数据库名称包含特殊字符串报错解决方法
# 方法二:使用pymysql.connect()方法建立连接
import pymysql
eng = pymysql.connect("118.190.000.111","zhangjian","zhangjiang*2018","demo" )
data = pd.read_sql(sql = "select * from orderitem limit 10" ,con=eng)
data
▲(点击可查看大图)
# pymsql.connect连接,读入指定表名称,会报错,关键信息1064
eng=pymysql.connect(host="118.190.000.111",user="zhagnjian",password="zhangjian*2018",db="demo" ,charset='utf8')
data = pd.read_sql(sql = "category",con=eng)
data
▲(点击可查看大图)
使用connection.cursor()方法读取数据库文件
# 导入sql文件 使用官方文档案例方法
#导入数据库模块
import pymysql
# 连接数据库
eng = pymysql.connect("118.190.000.111","zhangjian","ZhangJian*2018","demo" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = eng.cursor()
# 编写sql语句
sql = """
select * from orderitem limit 10;
"""
# 使用 execute() 方法执行 SQL 查询
cursor.execute(sql)
# 使用 fetchall() 方法获取所有数据.
data = cursor.fetchall()
# 关闭数据库连接
eng.close()
# 返回元组
data
# 返回信息包括数据类型等数据列信息
▲(点击可查看大图)
# 将元组转化为DataFrame
df2 = pd.DataFrame(data = list(data) ,columns = ['SDate', 'ShopID', 'SheetID', 'GoodsID',
'CateID', 'Qty', 'CostValue','SaleValue', 'OriSaleValue', 'Cost', 'Price'] )
df2
04 读入数据库文件方法总结
-
使用create_engine方法能够满足绝大部分数据库连接与操作命令;
-
数据库连接信息包含特殊字符串,需要使用mysql.connect()作为连接方法;
-
pd.read_sql()方法读入数据库文件,返回数据框结构,可以快速浏览数据汇总;
-
pd.read_sql()使用con参数使用pymsql.connect()方法,sql参数不能直接使用表名称,需要使用完整的sql语句;
-
使用 cursor() 方法创建游标的方法读取sql语句,返回的是包含列信息的元组,
综上所述,在pandas框架下使用create_engine 加read_sql()方法,读取数据库文件,代码简洁,易懂,返回的是据框;此方法可避免了数据库连接 工具 与python间的切换时间,有利于提高工作效率。
专注于数据科学领域的知识分享
欢迎在文章下方留言与交流
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Mysql常用sql语句(一)- 操作数据库
- 实用排坑帖:SQL语句性能优化操作策略大全
- thinkphp操作mysql之SQl语句报错及解决方案
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
- MySQL 建表语句转 PostgreSQL 建表语句全纪录
- Go语言开发-过程式编程-通信和并发语句-Select语句
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learn Python 3 the Hard Way
Zed A. Shaw / Addison / 2017-7-7 / USD 30.74
You Will Learn Python 3! Zed Shaw has perfected the world’s best system for learning Python 3. Follow it and you will succeed—just like the millions of beginners Zed has taught to date! You bring t......一起来看看 《Learn Python 3 the Hard Way》 这本书的介绍吧!