Windows “如何创建ODBC”;DSN“;用于跨平台测试?

Windows “如何创建ODBC”;DSN“;用于跨平台测试?,windows,odbc,pyodbc,Windows,Odbc,Pyodbc,我需要一个简单的ODBC测试场景对WIN,我可以配置非常简单,并确保它是在工作中支持另一个问题在 简而言之,我正在尝试在KVM/QEMU虚拟系统(192.168.1.12)中设置从Debian 10(192.168.1.2)到Windows 10的PyODBC/Python脚本连接 首先,在Windows 10/KVM上,我看到ODBC数据源管理员有一个选项卡文件DSN和Microsoft文本驱动程序我可以使用FileDSN测试Python PyODBC与ODBC的连接吗?使用一个简单的CSV文

我需要一个简单的ODBC测试场景对WIN,我可以配置非常简单,并确保它是在工作中支持另一个问题在

简而言之,我正在尝试在KVM/QEMU虚拟系统(192.168.1.12)中设置从Debian 10(192.168.1.2)到Windows 10的PyODBC/Python脚本连接

首先,在Windows 10/KVM上,我看到
ODBC数据源管理员
有一个选项卡
文件DSN
Microsoft文本驱动程序
我可以使用FileDSN测试Python PyODBC与ODBC的连接吗?使用一个简单的CSV文件代替服务器???(我对ODBC的研究只发现运行的服务器实例)

接下来,我尝试的是:

  • 我在Debian上安装了

  • 关闭Windows 10防火墙,我可以在两个方向ping:

    $nmap-p 22 192.168.1.12
    #Deb获胜

    >测试网络连接192.168.1.2-第22页

  • 在Windows 10/KVM上,我添加了一个带有Microsoft文本驱动程序的FileDSN。我创建了一个CSV文件(
    odbc\u test\u 01.CSV
    ),其中包含简单的头和一行数据(即
    {'ID':1,'NAME':'FOO'}

  • 创建了一个Jupyter笔记本,使测试更容易。以下是我的连接字符串和结果:

    cn = pyodbc.connect(r'Driver={ODBC Driver 17 for SQL Server};' # Driver installed above
                    r'FILEDSN=odbc_test_01.csv;'  # my attempt at FileDSN
                    r'SERVER=192.168.1.12;'  # KVM IP tested with ping
                    r'Trusted_Connection=no;' # explicit; use UID/PWD
                    r'UID=<username>;'   # Windows user name 
                    r'PWD=<password>',  # Windows user password 
                    autocommit=True)
    
    OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
    
    cn=pyodbc.connect(r'Driver={odbcdriver 17 for SQL Server};'#上面安装的驱动程序
    r'FILEDSN=odbc_test_01.csv;#我尝试使用FILEDSN
    r'SERVER=192.168.1.12;'#使用ping测试KVM IP
    r'Trusted_Connection=no;'#显式;使用UID/PWD
    r'UID=;'#Windows用户名
    r'PWD=',#Windows用户密码
    自动提交=真)
    操作错误:('HYT00','[HYT00][Microsoft][ODBC驱动程序17 for SQL Server]登录超时已过期(0)(SQLDriverConnection)')
    
  • 使用相同的字符串从Debian命令行尝试了
    isql

    isql-v-k''Driver={odbcdriver 17 for SQL Server};FILEDSN=odbc_test_01.csv;服务器=192.168.1.12;可信_连接=否;UID=;PWD='

SO的类似页面:

ODBC“文件DSN”不是访问文件中数据的驱动程序。这是一种将DSN(目标数据库的连接信息)指定为独立文件中的值,而不是Linux上的标准配置文件(例如,
/etc/odbc.ini
)或Windows注册表中的值的方法

如果您需要“克隆”Windows DSN条目以在Linux环境中使用,那么我的实用程序可能会有所帮助。它从Windows注册表中检索ODBC DSN,并以您可以用于在Linux上重新创建DSN的形式显示它

例如,假设我在Windows上有一个名为“mssql199”的DSN,当我在上面运行
dump\u DSN.to\u text(“mssql199”)
时,我得到了它

[mssql199]
Driver=ODBC Driver 17 for SQL Server
Description=with UseFMTONLY
Server=192.168.0.199
Database=myDb
Encrypt=No
TrustServerCertificate=No
ClientCertificate=
KeystoreAuthentication=
KeystorePrincipalId=
KeystoreSecret=
KeystoreLocation=
UseFMTONLY=Yes
Trusted_Connection=No
要在Linux机器上使用相同的DSN,我必须

  • 将该块复制到
    /etc/odbc.ini
    (或等效文件,用于“系统DSN”)或
    ~/.odbc.ini
    (用于“用户DSN”)中,以使用
    DSN=mssql199
    ,或
  • 使用
    [ODBC]
    头而不是
    [mssql199]
    将该块保存到文件中,例如
    /home/gord/mssql199_file.dsn
    (对于“文件dsn”),并使用
    FILEDSN=/home/gord/mssql199_file.dsn

  • Editre:“我可以使用FileDSN来测试Python PyODBC与ODBC的连接,使用一个简单的CSV文件代替服务器吗??”


    不可以。Windows设备上的ODBC DSN或FILEDSN仅在从Windows设备连接到数据源(本地或其他计算机上)时有用。我们无法从一台机器(如Linux)连接到另一台机器上的ODBC DSN条目

    我创建了一个SQLite数据库。然后我补充道