pyodbc 通过 dsn 连接达梦数据

达梦 ODBC 配置

这个网上都有对应教程,此处不做过多赘述。

达梦的 odbc 配置

达梦数据库最麻烦的点在于,如果不是本用户创建的对应的模式数据库,无法直接像 SQLServer 、MySQL 一样直接查询。

如果对达梦数据库的模式和用户还不熟悉可以先阅读他们的技术文档。达梦 SQL 数据库技术文档

pyodbc

注:我的方法不适用于大型数据库的查询,大型数据表需要自己进行数据库优化。
数据库优化

通过 pip install pyodbc 直接安装 odbc 连接第三方库。

pyodbc 主要通过游标进行数据库查询,依赖 SQL 查询语句,对于过大的数据表时,可考虑设计数据库和 SQL 查询语句进行优化。

查询所有表格

达梦数据库的查询不会根据不同的表空间进行划分,查询后返回的是所有表空间中的表信息。(达梦数据库的表空间类似 SQL Server 中的数据库,但有不同)

SQL 语句作用
SELECT * FROM SYS.DBA_TABLES所有表,包括系统表
SELECT * FROM SYS.USER_TABLES所有用户表,就是当前用户能够管理的表
SELECT * FROM SYS.ALL_TABLES所有表,包括系统表

因为我的表格是通过达梦自动创建的实例,所以里面的表我都没办法直接访问。

我只能通过 owner(模式).table,需要通过 dab_tables 获取对应的 owner 属性名称。

SELECT OWNER、TABLE_NAME FROM SYS.DBA_TABLES;

里面还含有系统表和临时表,通过user_tables表格进行过滤

SELECT OWNER,TABLE_NAME FROM SYS.DBA_TABLES WHERE TABLE_NAME in  (SELECT TABLE_NAME from SYS.USER_TABLES) and TEMPORARY = 'N';

通过以上查询就能得到我们数据库中所有的自己创建的表,不区分表空间。
建议通过 模式 + 表名 来读取数据,能更大程度上避免登录用户的名称和模式名不同引起的冲突

SELECT * FROM OWNER.TABLE WHERE a = 'b';
import pyodbc

print([x for x in pyodbc.drivers() if x.startswith('DM8 ODBC DRIVER')])

# 替换为你的 SQL Server 连接信息
dsn = 'your_dm_odbc_name'

# 构建连接字符串
connection = pyodbc.connect(f'DSN={dsn};' + 'DRIVER={DM8 ODBC DRIVER};')

# 创建游标
cursor = connection.cursor()

# 获取所有表格的名称
table_names = []
# 这里的查询语句根据自己需要进行对应的 SQl 查询语句优化
query = "SELECT OWNER,TABLE_NAME FROM SYS.DBA_TABLES WHERE TABLE_NAME in " \
        "(SELECT TABLE_NAME from SYS.USER_TABLES) and TEMPORARY = 'N';"

# 执行查询
cursor.execute(query)
tables = cursor.fetchall()
# 打印表格名称
print("Tables in the database:")
for table_name in tables:
    table_name = '.'.join(table_name)
    query = "SELECT * FROM {}".format(table_name)
    cursor.execute(query)
    table_info = cursor.description
    t = cursor.fetchall()
    print(table_name)
    print(table_info)
    print(t)

# 关闭连接
connection.close()
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctr+Alt+Del

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值