所以我一直在努力寻找一个好的模块来查询我公司POSTGRES数据库的信息。 周围有很多模型,但我似乎只能让pyodbc工作。
为什么pyodbc的连接形式不同于psycopg2,这似乎是优秀的模块?
我如何将我的连接查询从一个变为另一个?
我可以通过 pyodbc 连接到我的公司服务器,没问题。
pyodbc.connect("DRIVER={SQLServer};SERVER=some\servername;DATABASE=someDatabaseName;Trusted_Connection=yes")
但这不适用于 psycopg2 :
psycopg2.connect(database="someDatabaseName", host="some\servername")
psycopg2 返回:
OperationalError:无法翻译主机名"某些\ servername"至 地址:未知主机
主题:
我希望有人可以提供帮助,我的heroku服务器根本不想安装pyodbc
答案 0 :(得分:1)
pyodbc
是一个Python模块,可用于使用ODBC API连接到许多不同类型的数据库。具体而言,pyodbc
符合DB API 2.0规范。
您的工作代码示例使用SQL Server驱动程序的ODBC实现连接到SQL Server实例。 驱动程序是特定于DBMS的, ODBC 不是。
答案 1 :(得分:0)
我遇到了同样的问题。我想重新使用 pyodbc 使用的 ODBC 连接详细信息,以使用 psycopg2 连接到 PostgreSQL 数据库。
可以在 Windows 注册表中找到连接详细信息。
基本上,以下代码将从注册表中提取所需的详细信息:
import os
from winreg import (
ConnectRegistry,
HKEY_LOCAL_MACHINE,
OpenKeyEx,
QueryValueEx,
)
def odbc_dsn_2_psyopg2dsn(odbc_dsn, user, pwd ):
"""
This function converts a windows ODBC DSN to a dsn
that can be used by psycopg2.
It reads connection parameters from the windows registry,
username and password are often not in there,
and can be supllied as parameters.
"""
# get hostname, port, sslmode from odbc registry
hreg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
key = f"SOFTWARE\\ODBC\\ODBC.INI\\{odbc_dsn}"
hkey = OpenKeyEx(hreg, key)
hostname = QueryValueEx(hkey, "Servername")[0]
portnumber = QueryValueEx(hkey, "Port")[0]
sslmode = QueryValueEx(hkey, "SSLmode")[0]
database = QueryValueEx(hkey, "Database")[0]
#set defaults for portnmumber and SSL mode (my pref, maybe in your case there are in the registry too)
if not portnumber:
portnumber = "5432"
if not sslmode:
sslmode = 'Prefer'
# using all of the above, create psycopg2 connection-dsn
return f"dbname={database} user={user} password={pwd} host={hostname} port={portnumber} sslmode={sslmode}"