【问题标题】:Python and Win32com module issue with querying SQL Database rows查询 SQL 数据库行的 Python 和 Win32com 模块问题
【发布时间】:2022-10-13 03:36:04
【问题描述】:

我的目标是使用 Win32com 模块通过 Python 控制台显示 SQL 查询。我可以使用 comobject 访问并成功显示 SQL 查询的字段,但是当我尝试显示行时,我陷入了异常。

背景

我使用了 PYODBC,它工作得很好,但是根据安装的 SQL 提供程序以及是否强制执行 TLS 1.2 存在限制。该软件有时会安装到外部 SQL 服务器,因此该软件的服务器上没有可以始终建立连接的提供程序。这就是为什么我现在通过 com 对象使用软件的内核来访问数据库,因为这绕过了需要安装提供程序或最新的 Windows 更新以允许 TLS 1.2 连接等的陷阱。

使用字段为我工作的 Win32com 代码

import win32com.client
import win32com

"""Connection"""
objprox = win32com.client.Dispatch("****.DbObjectProxy") #Blanked out for security of Software


"""Set Query"""
sql1 = "select * from ServiceConsumer_t"
dbq1 = objprox.DoDatabaseQuery(sql1)

dbq1.Open(sql1)


"""Specify & Print result"""
while not dbq1.EOF:
        col1 = dbq1.Fields("ID").Value
        dbq1.MoveNext()
        print(col1)

"""Close Session"""
dbq1.Close()

上面的输出是:

{9CAFD41E-D322-4234-BF80-CF6E11A724A0}
{CE4AAE72-0889-41E8-BDB2-ED96696DDB91}
{DC18008F-2C84-4EB4-BCCB-D94FF96E0564}
{1AAB143C-8393-4C1E-BE94-7AB44788D4E4}

这是正确的,因为我指定要输出的 ID 列并使用 MoveNext() 进行迭代。这表明我接近我的目标,但是,下面用于显示行的代码似乎从来没有工作过,我现在不知道为什么?

Win32com 代码不适用于我显示行:

import win32com.client
import win32com

"""Connection"""
objprox = win32com.client.Dispatch("*****.DbObjectProxy") #Blanked out for security of Software

"""Set Query"""
sql2 = "select * from ServiceConsumer_t"
dbq2 = objprox.DoDatabaseQuery(sql2)

dbq2.Open(sql2)

"""Specify & Print result"""
while not dbq2.EOF:
        dbq2.MoveFirst()
        res = dbq2.GetRows()
        dbq2.MoveNext()
        print(res)

"""Close Session"""
dbq2.Close()

由此,我简单地得到对象GetRows 没有属性的异常。在网上看,这方面的内容很少。请你能建议为什么代码不能显示所有行结果吗?理想情况下,我也希望显示列名。

【问题讨论】:

    标签: python sql sql-server win32com


    【解决方案1】:

    对此的简单回答是我手动添加了每一列以创建完整的行输出,如下所示:

    col1 = dbq1.Fields("ID").Value
    col2 = dbq1.Fields("Name").Value
    col3 = dbq1.Fields("Login").Value
    col4 = dbq1.Fields("Email").Value
    

    打印(str(col1)+“”+str(col2)+“”str(col3)+“”str(col4))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多