我们用数据库都是别人建好的,网上用Python链接Oracle都是cx_Oracle,链接SQLServer推荐的都是pymysql。cx_Oracle确实可以用,但是只支持Oracle11g的客户端,而pymysql在有的现场遇到报错,网上提示都是让改数据库配置,有点不现实,因为毕竟连的是人家的库,我们直接抽取数据。下面介绍一下pyodbc连接Oracle和SQLserver,主要也就是参数问题:
# !/usr/bin/env python
# -*-coding:utf-8 -*-
import pyodbc
a = pyodbc.drivers()
print(a)
# Oracle in OraClient10g_home3
odbc = 'DRIVER={Oracle in OraClient10g_home1};DBQ=127.0.0.1:1521/orcl;UID=user;PWD=password'
db = pyodbc.connect(odbc)
# 使用 cursor()方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()方法执行 SQL 查询
cursor.execute("select sysdate from dual")
# 使用 fetchall()方法获取所有数据
data = cursor.fetchone()
print(data)
# 关闭数据库连接,此时自动关闭多有游标对象
db.close()
用这个方法可以支持所有已经安装了的Oracle客户端,兼容性比较好。
SQLserver的链接方法
import pyodbc
print(pyodbc.version)
def sqlserver():
# SERVER 是服务器名称,DATABASE 是数据库名称,UID 是用户名,PWD 是密码
odbc = 'DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=name;UID=user;PWD=Password'
# 打开数据库连接
db = pyodbc.connect(odbc)
# 使用 cursor()方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()方法执行 SQL 查询
cursor.execute(
"SELECT '1', mzhm, PatientName, SexName, DeviceTypeName, ApplicationID, OperateTime FROM V_ApplicationInfo_MZ "
"WHERE OperateTime > getdate() - 1 GROUP BY SexName,mzhm, PatientName,DeviceTypeName, ApplicationID, OperateTime")
# 使用 fetchall()方法获取所有数据
data = cursor.fetchall()
# 关闭数据库连接,此时自动关闭多有游标对象
db.close()
return data
上述两段代码亲测有效