Python连接多种数据库的方式
本次主要介绍3种数据库(MySQL、PostgreSQL、oracle)如何用Python连接。
一、MySQL
MySQL这里介绍三种Python的库来连接,分别是sqlalchemy、MySQLdb、PyMySQL。
1、sqlalchemy
sqlalchemy是python中著名的orm框架,通过这个框架可以不用关心sql语句,就能操作数据库。大大的提高开发效率。当然通过orm来操作数据库会执行很多的数据库冗余操作,降低程序的运行效率。
安装
直接使用pip安装。
pip install sqlalchemy或者easy install sqlalchemy
在Python3.6之后似乎使用MySQLdb不是很方便,索性就用pymysql了。
示例
from sqlalchemy import create_engine
## 地址为127.0.0.1,数据库名称为tipdm
engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/tipdm?charset=utf8')
data = pd.read_sql('select * from all_gzdata',con=engine)
2、MySQLdb
MySQLdb是用于Python链接Mysql数据库的接口,它实现了Python 数据库API规范V2.0,基于MySQL C API上建立的。
安装
直接使用pip安装,MySQLdb模块的名字在pip上叫MySQL-python。
pip install MySQL-python
常用函数
Python DB API 2.0 对事务提供了两个方法:
commit()
提交rollback()
回滚
cursor用来执行命令的方法:
callproc(self, procname, args)
用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数execute(self, query, args)
执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数executemany(self, query, args)
执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数nextset(self)
移动到下一个结果集
cursor用来接收返回值的方法:
fetchall(self)
接收全部的返回结果行fetchmany(self, size=None)
接收size条返回结果行。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据fetchone(self)
返回一条结果行rowcount
这是一个只读属性,并返回执行execute() 方法后影响的行数scroll(self, value, mode='relative')
移动指针到某一行;如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条
示例
import MySQLdb as mdb
# 连接数据库
conn = mdb.connect('localhost', 'root', 'root')conn = mdb.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='test', charset='utf8')# 可以使用关键字参数config = {'host': '127.0.0.1','port': 3306,'user': 'root','passwd': 'root','db': 'test','charset': 'utf8'}# 可以使用字典进行连接参数的管理
conn = mdb.connect(**config)# 如果使用事务引擎,可以设置自动提交事务,或者在每次操作完成后手动提交事务
conn.autocommit(1) # conn.autocommit(True)# 使用cursor()方法获取操作游标
cursor = conn.cursor()try:# 创建数据库DB_NAME = 'test'cursor.execute('DROP DATABASE IF EXISTS %s' %DB_NAME)cursor.execute('CREATE DATABASE IF NOT EXISTS %s' %DB_NAME)conn.select_db(DB_NAME)#创建表TABLE_NAME = 'user'cursor.execute('CREATE TABLE %s(id int primary key,name varchar(30))' %TABLE_NAME)# 插入单条数据sql = 'INSERT INTO user values("%d","%s")' %(1,"jack")# 不建议直接拼接sql,占位符方面可能会出问题,execute提供了直接传值value = [2,'John']cursor.execute('INSERT INTO test values(%s,%s)',value)# 批量插入数据values = []for i in range(3, 20):values.append((i,'kk'+str(i)))cursor.executemany('INSERT INTO user values(%s,%s)',values)# 查询数据条目count = cursor.execute('SELECT * FROM %s' %TABLE_NAME)print('total records: %d' %count)print('total records:', cursor.rowcount)# 获取表名信息desc = cursor.descriptionprint("%s %3s" % (desc[0][0], desc[1][0]))# 查询一条记录print('fetch one record:')result = cursor.fetchone()print(result)print('id: %s,name: %s' %(result[0],result[1]))# 查询多条记录print('fetch five record:')results = cursor.fetchmany(5)for r in results:print(r)# 查询所有记录# 重置游标位置,偏移量:大于0向后移动;小于0向前移动,mode默认是relative# relative:表示从当前所在的行开始移动; absolute:表示从第一行开始移动cursor.scroll(0,mode='absolute')results = cursor.fetchall()for r in results:print(r)cursor.scroll(-2)results = cursor.fetchall()for r in results:print(r)# 更新记录cursor.execute('UPDATE %s SET name = "%s" WHERE id = %s' %(TABLE_NAME,'Jack',1))# 删除记录cursor.execute('DELETE FROM %s WHERE id = %s' %(TABLE_NAME,2))# 如果没有设置自动提交事务,则这里需要手动提交一次conn.commit()
except:import tracebacktraceback.print_exc()# 发生错误时会滚conn.rollback()
finally:# 关闭游标连接cursor.close()# 关闭数据库连接conn.close()
3、PyMySQL
PyMySQL是一个纯Python写的MySQL客户端,它的目标是替代MySQLdb,可以在CPython、PyPy、IronPython和Jython环境下运行。
PyMySQL的性能和MySQLdb几乎相当,如果对性能要求不是特别的强,使用PyMySQL将更加方便。
PyMySQL的使用方法和MySQLdb几乎一样。
安装
pip install pymysql
示例
import os
import pymysql
import pandas as pd
# 读取数据1
os.getcwd()
os.chdir('E:/')
db = pymysql.connect('localhost','root','123456','tipdm',charset='gbk')
# host: 这个是ip地址,因为我这里是本地的,所以填127.0.0.1,也可以填localhost。
# user:用户名,如果你也是本地的,就填root好了
# passwd:这个是密码
# db:这个是数据库名
# port:这个是端口,本地的一般都是3306
# charset:这个是编码方式,要和你数据库的编码方式一致,要不会连接失败
data = pd.read_sql('select * from all_gzdata',con=db)
db.close() #关闭连接
# 读取数据2
try:db = pymysql.connect('localhost','root','123456','tipdm',charset='gbk')cursor = db.cursor() # 光标
# 这个是执行sql语句,返回的是影响的条数data = cursor.execute('SELECT * FROM `all_gzdata`')print(cursor.fetchone())print(data)cursor.close() # 关闭光标
except pymysql.Error as e:print(e)print('操作数据库失败')
finally:# 如果连接成功就要关闭数据库if db:db.close()print(cursor.description)
new = dict(zip([x[0] for x in cursor.description],[x for x in cursor.fetchone()]))
print(new)
print(new['title'])
# 上面的只是一条数据的,如果是多条,就需要用到map函数
def new2dict(new):return dict(zip([x[0] for x in cursor.description],[x for x in new]))
news_list = list(map(new2dict,cursor.fetchall()))
print(news_list)
二、PostgreSQL
PostgreSQL可以用Python psycopg2模块集成。 sycopg2是Python编程语言的PostgreSQL数据库的适配器。 其程序代码少,速度快,稳定。
安装
pip install psycopg2
示例
import psycopg2
import pandas as pd
con = psycopg2.connect(database="969368", user="postgres", password="root", host="10.16.15.18", port="5432")data = pd.read_sql('select * from mm_bill',con=con)
data.to_csv('11.csv')
data.ix[1,:]
data.columns
三、oracle
工作中使用的是Oracle数据库,Python有一个模块cx_Oracle可以与Oracle相连。
安装
要使用cx_Oracle,就要先下载。
pip install cx_Oracle
示例
import pandas as pd
import cx_Oracle #引用模块cx_Oracle
# select value from v$parameter where name like '%service_name%' ,查看服务名称
conn=cx_Oracle.connect('dbcustadm/test928@10.16.9.28:1521/crmdb30') #连接数据库
data = pd.read_sql('select * from cparambase',con = conn) # 获取数据
conn.close() #关闭cursor
文章未经博主同意,禁止转载!
Python连接多种数据库的方式相关推荐
- python处理teradata数据库_【Python连接数据库】Python连接Teradata数据库-ODBC方式(pyodbc包和teradata包)...
1.安装Python (1)前置安装包查看 rpm -qa |grep -i zlib rpm-qa |grep -i bzip2rpm-qa |grep -i ncurses rpm-qa |gre ...
- Python连接Oracle数据库,以字典形式返回结果
众所周知,Python连接Oracle数据库,一般都使用cx_Oracle这个包. 但关键是cx_Oracle这个包,返回的结果,都是元组或者列表. 如以下代码: 1 import cx_Oracle ...
- python连接mysql数据库数据
使用python连接mysql数据库数据,有以下两种读取数据的方式推荐. 一种是通过游标,及fetch系列方法进行操作,另一种是通过pandas的read_sql()进行读取并操作.各种方法各有优劣, ...
- pythonaccess系统_Win7(64位系统)中用Python连接access数据库(access2010)
[本机是win7 64位操作系统,做数据库实例时需要创建Access数据库的ODBC数据源,但是打开ODBC数据源后发现添加里面没有配置access的连接,如下图:还会弹出以下问题框:# -*- co ...
- python 连接SQL数据库18456错误整合
python 连接SQL数据库18456错误整合 参考资料 环境配置 问题汇总 划重点: 参考资料 链接: sqlserver登录失败18456解决方案. 环境配置 (1)py36 (2)pymssq ...
- Java连接mysql数据库的方式,java连接mysql数据库的方式(4句语句)
1 加载mysql驱动: class.forName("con.mysql.jdbc.Driver").newInstance(); 2 根据数据库路径url,账号,密码进行数据库 ...
- Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法
Python 连接 Oracle 数据库 第一章:连接 oracle 数据与环境配置 ① 连接 oracle 数据库效果演示 ② oci 下载 ③ oci 配置 ④ 环境变量配置 ⑤ 检测是否有 or ...
- python链接hbase模块_HBase实战(1):使用Python连接Hbase数据库
来源于 https://blog.csdn.net/duan_zhihua/java/article/details/80622166 使用Python连接Hbase数据库 1,Hbase下载. 下载 ...
- python连接各种数据库数据_Python连接各种数据库
1.连接Hive数据库 想直接使用python连接hive数据库,貌似有很多包可以选,网上用的比较多的是PyHive和impyla.这里我直接选用了PyHive. Pyhive这个包安装非常容易,这里 ...
- Python连接Mysql数据库入门
Python 连接mysql数据库入门教程 直接上代码 数据库建表省略 要执行哪段代码把#去掉即可:有文字解释 难度 : ⭐⭐(全星5颗星的情况下) import pymysql # 导入模块 根据P ...
最新文章
- 记一次解决 quill(vue-quill-editor) 编辑器中莫名多出一行“pbr/p”的过程...
- 使用 Feign 调用分页接口报错:Method has too many Body parameters(亲测)
- mysql怎么改字体编码_mysql怎么改字符编码?
- Sqlite error- INSERT failed: datatype mismatch
- Python 用for循环实现猜数字游戏
- Linux 下Nginx+Tomcat 完美整合 nginx tomcat 整合方式
- renren-fast-vue:关闭ESLint检测
- linux 终端 拼音,告诉你Ubuntu中文智能拼音输入法配置的方法及命令
- 【知识碎片】JavaScript篇
- .atitit.web 推送实现解决方案集合(3)----dwr3 Reverse Ajax
- php 时分秒转时分_php 时分秒转为秒,秒转化为天时分秒
- 酷派大神9976A刷机
- java设计triangle三角形_Java:【三角形类Triangle】设计一个名为Triangle的类来扩展GeometricObject类。该类包括:...
- 通过爬虫爬取一些图片
- 火狐浏览器Firefox Firebug使用方法
- 深入探索 Android 网络优化(一、网络筑基篇)上
- 【计算机网络】广域网协议分析
- 【OP-TEE】安全存储
- PHP 手机靓号规则、正则匹配、号码查询
- 腾讯云Windows Server 2012 R2安装wamp2.5提示缺少msvcr100.dll文件的解决方案
热门文章
- 【kafka】Flink消费kafka Error sending fetch request
- C# 中的委托和事件(详解)
- android手表怎样刷机,智能手表是怎样一键刷机的
- radius mysql md5_Radius认证
- 高数_第3章重积分_三重积分的奇偶性
- mysql keepalived配置文件详解_Keepalived配置文件详解
- 今天正式入职了字节跳动,分享点经验
- 【附源码】计算机毕业设计java学生网上请假系统设计与实现
- android短信过滤关键词,iOS 11的垃圾短信按关键词过滤功能使用介绍
- linux下编译和安装log4cxx,ubuntu下log4cxx安装使用