python通过ODBC连接南大通用数据库,进行数据库查询
环境说明
- window平台安装了VMware虚拟机(为了安装Gbase 8s数据库),并在window平台通过ODBC连接Gbase 8s数据库,通过pyodbc的DSN方式对数据库进行查询。
- Gbase 8s
- python3.7
- redhat7
数据库服务器配置
- 创建实例
按照官方的Gbase 8s的安装手册进行典型安装,会创建ol_gbasedbt1210数据库实例。 - 关闭防火墙
进入root账户,临时关闭防火墙。(重启电脑后,防火墙自动起来)systemctl stop firewalld
- 配置数据库的ip地址
进入root帐号查看所有地址和端口号netstat -nptal
- gbasedbt用户,找到sqlhosts.ol_gbasedbt1210,用vi指令进行做以下更改
gbase8s onsoctcp 192.168.0.106 4639
gbase8s_drda drsoctcp 192.168.0.106 4640
- 创建数据库
创建test3数据库
进入gbasedbt用户,通过dbaccess --
,指令进入DB-Access界面,创建test3数据库,并创建test3path表,字段名有id和path。
win平台配置配置DSN
- GBase 8s ODBC Driver 提供 GUI 来配置 DSN
利用官方提供的ODBC Driver 程序员指南文档安装ODBC驱动。
以下系列软件会安装在你的电脑上 - 配置Setnet32参数
打开Setnet32之后,对于environment选项不用配置参数
而Server Information配置如下
然后Host Information配置如下,usrer name和password填自己的噢~ - 配置ODBC数据源驱动
在控制面板找到管理工具,然后打开:ODBC 数据源(64 位),配置系统DSN,并应用。其中配置参数如下:
General参数
Connection参数,并进行测试。
Environment参数 - 向数据库test3插入数据
打开window平台的ConnetTest Demo软件,配置以下参数,并执行。假如成功的话,那恭喜你连接成功啦~
python环境开发
- 安装pyodbc,cmd命令行输入
pip install pyodbc
- 废话不多说,直接上代码:
# -*- coding: UTF-8 -*-
import pyodbc
import time
'''
python DSN方式找南大通用数据库所有文件路径 new_res
'''
start_time = time.time()
def qidong(DSN):
db = pyodbc.connect('DSN=gbase')
cursor = db.cursor()
#连表查询非系统表
sql_2 = '''select tabname,colname from systables CROSS JOIN syscolumns where systables.tabid>99;'''
cursor.execute(sql_2)
results = cursor.fetchall()
new_res = []
for i in range(0, len(results)):
try:
test_sql_1 = '''select * from {0} where {1} like'%.docx% 'or {2} like '%.pdf%' or {3} like '%.txt%'or {4} like '%.jpg%' or {5} like '%.png%' or {6} like '%.xlsx%' or {7} like '%.xlsx%';'''.format(results[i][0],
results[i][1],
results[i][1],
results[i][1],
results[i][1],
results[i][1],
results[i][1],
results[i][1])
cursor.execute(test_sql_1)
results1 = cursor.fetchall()
# 调用清洗数据函数
res = drop(results1)
new_res.append(res)
except Exception as e:
pass
continue
print(new_res)
#清理数据
def drop(dark_pathfilename):
res = []
for item in dark_pathfilename:
for element in item:
choices = ['.pdf','.docx','.txt','.jpg','.png','.xlsx','.pptx']
ele = str(element)
a =ele.rstrip()
if type(a) == type('string') and a.endswith(tuple(choices)):
res.append(a)
return res
qidong(DSN='gbase')
end_time = time.time()
Scanning_time = end_time -start_time
print(f"扫描完毕,使用时间:{Scanning_time}秒")
'''最终结果在find_file_name函数里的new_res'''
- 查询结果
[[], [], [], ['weixin.docx', 'C:\\pythonwork\\weixin.docx', 'C:\\pythonwork\\weixin.docx', 'C:\\pythonwork\\weixin.docx', 'C:\\pythonwork\\weixin.pdf', 'C:\\pythonwork\\weixin.pdf', 'C:\\pythonwork\\weixin.pdf', 'C:\\pythonwork\\weixin.pdf', 'C:\\pythonwork\\weixin.pdf', 'C:\\pythonwork\\weixin.pdf', 'C:\\pythonwork\\weixin.pdf', 'C:\\pythonwork\\weixin.xlsx', 'C:\\pythonwork\\qq.pdf', 'C:\\pythonwork\\weixin.png']]
备注:
- 如果需要官方安装文档和Gbase 8s或者8t可以在南大通用的官网找到电话,并申请试用。
- Gbase 8s和8t安装过程很相似,本文可以作为参考。
- 感谢南大通用的产品支持。