Python链接数据库,SQL语句查询这样操作!

栏目: Python · 发布时间: 5年前

内容简介:01 前言Python链接数据库的方式有几种,但是原理都是一样的,总共可以分为两个步骤,第一步是与数据库建立链接,第二步执行sql查询语句,这篇将分别介绍如何与数据库链接以及如何进行sql语句查询。

Python链接数据库,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语句即可。

Python链接数据库,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)


# 此方法会读取指定表中的全部数据,如果表数据量比较大,会造成读取数据慢,慎用。

Python链接数据库,SQL语句查询这样操作!


 

# 修改改数据库密码后重新连接数据库

# 如用户名,密码,数据库名称包含% @等特殊字符串报错如下所示:报错关键信息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:

Python链接数据库,SQL语句查询这样操作!

▲(点击可查看大图)


 

# 用户名,密码,数据库名称包含特殊字符串报错解决方法

# 方法二:使用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

Python链接数据库,SQL语句查询这样操作!

▲(点击可查看大图)


 

# 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

Python链接数据库,SQL语句查询这样操作!

▲(点击可查看大图)


 

使用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

# 返回信息包括数据类型等数据列信息

Python链接数据库,SQL语句查询这样操作!

▲(点击可查看大图)


 

# 将元组转化为DataFrame

df2 = pd.DataFrame(data = list(data) ,columns = ['SDate', 'ShopID', 'SheetID', 'GoodsID',

'CateID', 'Qty', 'CostValue','SaleValue', 'OriSaleValue', 'Cost', 'Price'] )

df2

Python链接数据库,SQL语句查询这样操作!

04 读入数据库文件方法总结

  • 使用create_engine方法能够满足绝大部分数据库连接与操作命令;

  • 数据库连接信息包含特殊字符串,需要使用mysql.connect()作为连接方法;

  • pd.read_sql()方法读入数据库文件,返回数据框结构,可以快速浏览数据汇总;

  • pd.read_sql()使用con参数使用pymsql.connect()方法,sql参数不能直接使用表名称,需要使用完整的sql语句;

  • 使用 cursor() 方法创建游标的方法读取sql语句,返回的是包含列信息的元组,

综上所述,在pandas框架下使用create_engine 加read_sql()方法,读取数据库文件,代码简洁,易懂,返回的是据框;此方法可避免了数据库连接 工具 与python间的切换时间,有利于提高工作效率。

专注于数据科学领域的知识分享

欢迎在文章下方留言与交流


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

世界因你不同

世界因你不同

李开复、范海涛 / 中信出版社 / 2009-9 / 29.80元

这是李开复唯一的一本自传,字里行间,是岁月流逝中沉淀下来的宝贵的人生智慧和职场经验。捣蛋的“小皇帝”,11岁的“留学生”,奥巴马的大学同学,26岁的副教授,33岁的苹果副总裁,谷歌中国的创始人,他有着太多传奇的经历,为了他,两家最大的IT公司对簿公堂。而他的每一次人生选择,都是一次成功的自我超越。 透过这本自传,李开复真诚讲述了他鲜为人知的成长史、风雨兼程的成功史和烛照人生的心灵史,也首次全......一起来看看 《世界因你不同》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器