Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase)
前言
想着能够使用多种数据库进行一些操作.
所以本文档讲解对多种数据库的连接方式进行一下总结.
备查
1. Oracle数据库
方式1: jaydebeapi
pip install jaydebeapi
需要注意 此方式需要客户端有jdk.
必须需要指定驱动的目录, 以及驱动的方法函数.
一般写法为:
jdbcString = 'oracle.jdbc.driver.OracleDriver'
driverPath = './driver/ojdbc8-19.3.0.0.jar'
urlString = 'jdbc:oracle:thin:@//10.110.xxx.xx:1521/oracle_sid(pdb)'
userName = 'username'
passWord = 'password'
conn = jaydebeapi.connect(jdbcString,urlString,[userName,passWord],driverPath)
cur = conn.cursor()
cur.execute("somesql")
something = cur.fetchall()
cur.close()
方法2: cx-Oracle
注意 这方法必须有 第一 pip install cx_Oracle
必须指定 oracle的instant client的路径.
他不是使用jdk来解析创建连接串, 使用的oracle 的客户端.
这个方法稍微繁琐一些.
import cx_Oracle
import configparser
from sqlalchemy import create_engine
import os
os.environ['path'] = r'D:\work\instantclient_12_2'
config = configparser.ConfigParser()
config.read('cx.ini',encoding='utf-8')
ip = config.get('cx', 'ip')
port = config.get('cx', 'port')
uname = config.get('cx', 'uname')
pwd = config.get('cx', 'pwd')
tnsname = config.get('cx', 'tnsname')
dsnStr = cx_Oracle.makedsn(ip, port, service_name=tnsname)
connect_str = "oracle://%s:%s@%s" %(uname, pwd, dsnStr)
engine = create_engine(connect_str)
conn = cx_Oracle.connect(uname, pwd, dsn=dsnStr)
cur = conn.cursor()
cur.execute("somesql")
something = cur.fetchall()
cur.close()
2. Mysql数据库
# Mysql作为开源数据库, python的支持其实非常简单
# 但是需要注意的是 pymysql的结果集是tuple.
# 其他的数据库基本上都是 list 所以建议将结果做一下显示转换, 避免有问题.
pip install pymysql
import pymysql
connmysql = pymysql.connect(
user = 'user',
password = 'password',
port = Server_port,
host = 'Server_ip',
database = 'databasename'
)
cur = connmysql.cursor()
cur.execute("somesql")
something = cur.fetchall()
somethinglist = list(something)
cur.close()
3. PG数据库
# 可以看到. Mysql与PG的连接字符串非常接近
# 但是需要注意,换了一个module的名字.
pip install psycopg2
import psycopg2
connpg = psycopg2.connect(
user = 'user',
password = 'password',
port = Server_port,
host = 'Server_ip',
database = 'databasename'
)
cur = connpg.cursor()
cur.execute("somesql")
something = cur.fetchall()
cur.close()
4. 人大金仓数据库
# 人大金仓可以直接使用PG数据库进行连接.
# 连接字符串是一模一样的.
# 需要先定义 conn 方法为 module.connect(五个元素)
# 然后cur = conn.cursor() 打开游标.
# 然后 cur.execute(somesql)
# 最后在通过 result = cur.fetchall() 获取数据就可以了.
pip install psycopg2
import psycopg2
connpg = psycopg2.connect(
user = 'user',
password = 'password',
port = Server_port,
host = 'Server_ip',
database = 'databasename'
)
cur = connpg.cursor()
cur.execute("somesql")
something = cur.fetchall()
cur.close()
5.达梦数据库
# 达梦数据库有自己的ptyhon包需要进行如下处理
# pip install dmPython
# 但是需要注意. 在引入之前还需要将部分文件放到 site-packages 目录下面
# 将 达梦数据库管理系统安装程序中的:C:\dmdbms\drivers\dpi 中所有的文件复制到
# python 依赖包中 与 dmPython.cp36-win32.pyd 相同的目录下.
import dmPython
conndm = dmPython.connect(
user = 'user',
password = 'password',
server = 'Server_ip',
port = Server_port
)
curdm = conndm.cursor()
curdm.execute(getsql)
dmresult = curdm.fetchall()
curdm.close()
6. SQLSERVER数据库
# 需要注意 sqlserver 是开源数据库, 对python来收有一些坑.
# 1. 注意链接字符串的最后面需要添加 charset='cp936' 不然中文会乱码
pip install pymssql
import pymssql
import configparser
config = configparser.ConfigParser()
config.read('sqlserverv.ini',encoding='utf-8')
mssip = config.get('MSSQL','ip')
mssuser = config.get('MSSQL','user')
msspassword = config.get('MSSQL','password')
mssdb = config.get('MSSQL','dbname')
connmss = pymssql.connect(mssip,mssuser,msspassword,mssdb,charset='cp936')
curmss = connmss.cursor()
curmss.execute(getsql)
mssresult = curmss.fetchall()
curmss.close()
7. 神通数据库
本来计划使用 STPython
但是发现不好用. 退而求其次准备使用 jaydebeapi 的方式.
首先配置信息为:
[OSCAR]
jdbcString=com.oscar.Driver
driverPath=./driver/oscarJDBC8.jar
urlString=jdbc:oscar://10.110.xxx.xxx:2003/osrdb
userName=xxx
passWord=xxxx
创建连接为:
import configparser
import jaydebeapi
config = configparser.ConfigParser()
config.read('oscar.ini',encoding='utf-8')
jdbcString = config.get('OSCAR', 'jdbcString')
driverPath = config.get('OSCAR', 'driverPath')
urlString = config.get('OSCAR', 'urlString')
userName = config.get('OSCAR', 'userName')
passWord = config.get('OSCAR', 'passWord')
connoscar = jaydebeapi.connect(jdbcString, urlString, [userName, passWord], driverPath)
curoscar = connoscar.cursor()
curoscar.execute(getsql)
oscarresult = curoscar.fetchall()
curoscar.close()