【问题标题】:Unable to connect to PostgreSQL using pyodbc无法使用 pyodbc 连接到 PostgreSQL
【发布时间】:2020-07-15 07:50:10
【问题描述】:

我是 pyodbc 的新手。

我无法使用以下代码连接到 PostgreSQL -

cnxn = pyodbc.connect('Driver={PostgreSQL35W};Server=dummy.cag.com;Port=5432;Database=postgres;Uid=postgres;Pwd=postgres;') 

它抛出“pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')”错误。

我已经像一样配置了DataSource

连测试连接都成功了。

在这方面寻求帮助。

完整代码 - 它只是一个简单的程序单元 -

import pyodbc as pyodbc

def perform_db_operation():
  
    cnxn = pyodbc.connect('Driver={PostgreSQL35W};Server=dummy.cag.com;Port=5432;Database=postgres;Uid=postgres;Pwd=postgres;')
    select_cursor = cnxn.cursor()
    sql_select_stmt = "SELECT * from public.gluetable212a"
    select_cursor.execute(sql_select_stmt)
    result_set = select_cursor.fetchall()

    for current_record in result_set:
        passenger_id = current_record[0]
        age = current_record[1]
        fare = current_record[2]
        ticket = current_record[3]
        # insert_cursor.execute(sql_insert_stmt, emp_name, emp_id)
    print(passenger_id, age, fare, ticket)
    select_cursor.close()
    cnxn.commit()
    cnxn.close()


perform_db_operation()

运行控制台日志 -

C:\Users\KarthikDeepan.Gujulu\PycharmProjects\MyProj\venv\Scripts\python.exe C:/Users/KarthikDeepan.Gujulu/PycharmProjects/MyProj/ICOMP/PyODBCTrail1.py
Traceback (most recent call last):
  File "C:/Users/KarthikDeepan.Gujulu/PycharmProjects/MyProj/ICOMP/PyODBCTrail1.py", line 38, in <module>
    perform_db_operation()
  File "C:/Users/KarthikDeepan.Gujulu/PycharmProjects/MyProj/ICOMP/PyODBCTrail1.py", line 16, in perform_db_operation
    cnxn = pyodbc.connect('Driver={PostgreSQL ANSI};Data Source=decheqaperf01v.asg.com;Port=5432;Database=postgres;Uid=postgres;Pwd=postgres;')
pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

Process finished with exit code 1

【问题讨论】:

  • 作为错误状态,您缺少数据源条目。看看connectionstrings.com/postgresql
  • 谢谢,但我已经检查过了。我的连接字符串正确吗?我应该在这里给 Driver=PostgreSQL35W 吗?还是我错过了什么?
  • 需要数据源条目。在您的连接字符串中,您缺少 Data Source 条目。
  • 请贴出相关代码和完整的回溯。这个错误开始没有任何意义
  • @kdkarthik - 检查 pyodbc.drivers() 返回的列表,了解您的 Python 应用程序可用的驱动程序。

标签: python-3.x postgresql odbc pyodbc


【解决方案1】:

@GordThompson,您的评论帮助我找到了问题所在。我已经下载并安装了驱动程序 x64 版本,那时 pyodbc.drivers() 没有显示 PostgresDriver 作为驱动程序之一。然后我下载了 x86 版本,它现在开始显示驱动程序列表('ODBC Data Sources 32-bit' 应用程序和pyodbc.drivers() 输出)并且程序单元按预期工作。

控制台输出:

['Driver da Microsoft para arquivos texto (*.txt; *.csv)', 'Driver do Microsoft Access (*.mdb)', 'Driver do Microsoft dBase (*.dbf)', 'Driver do Microsoft Excel(*.xls)', 'Driver do Microsoft Paradox (*.db )', 'Microsoft Access Driver (*.mdb)', 'Microsoft Access-Treiber (*.mdb)', 'Microsoft dBase Driver (*.dbf)', 'Microsoft dBase-Treiber (*.dbf)', 'Microsoft Excel Driver (*.xls)', 'Microsoft Excel-Treiber (*.xls)', 'Microsoft ODBC for Oracle', 'Microsoft Paradox Driver (*.db )', 'Microsoft Paradox-Treiber (*.db )', 'Microsoft Text Driver (*.txt; *.csv)', 'Microsoft Text-Treiber (*.txt; *.csv)', 'SQL Server', 'PostgreSQL ANSI', 'PostgreSQL Unicode']
10 employee1 10 address1
20 employee2 20 address2
30 employee3 30 address3
40 employee4 40 address4
50 employee5 50 address5

【讨论】:

  • @GordThompson,我还有一个问题,我的电脑是 64 位操作系统,基于 x64 的处理器,我们如何确定要为此安装哪个版本(x64,x86)的驱动程序?
  • 驱动程序的“位数”必须与您正在运行的 Python 版本的“位数”相匹配。您正在运行 32 位 Python,因此您需要安装 32 位版本的 ODBC 驱动程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
相关资源
最近更新 更多