为什么psycopg2和pyodbc以不同的方式连接到数据库?我怎么能翻译一个连接?

时间:2016-04-25 14:37:12

标签: postgresql python-2.7 heroku psycopg2 pyodbc

所以我一直在努力寻找一个好的模块来查询我公司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

2 个答案:

答案 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}"
相关问题