暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python学习之十四_连接各种数据库-DM,OSCAR,Kingbase,Oracle,SQLSERVER,MYSQL,PG

济南小老虎 2023-08-11
121

前言

想着能够使用多种数据库进行一些操作.
所以本文档讲解对多种数据库的连接方式进行一下总结.
备查


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


文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论