Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase

发布时间 2023-11-20 07:23:26作者: 济南小老虎

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()