首页 文章

Python - 用于SQL Anywhere 16的Pyodbc?

提问于
浏览
1

我正在尝试使用Pyodbc通过python连接到数据库,如下所示:

import pyodbc
import pandas as pd

conn = pyodbc.connect('Driver={SQL Anywhere 16};'
                      'Server=***.**.**.***;'
                      'Database=**********;'
                      'Trusted_Connection=yes;'
                      )

Data = pd.read_sql_query("SELECT * FROM * WHERE Date='20180328'", conn)
print(Data)

但收到错误:

第4行,在conn = pyodbc.connect('Driver = {SQL Anywhere 16};'pyodbc.Error:('08001','[08001] [Sybase] [ODBC驱动程序] [SQL Anywhere]找不到数据库服务器( -100)(SQLDriverConnect)')

我在Windows上使用驱动程序“SQL Anywhere 16”进行ODBC配置,并且可以使用此ODBC连接通过Squirrel SQL进行连接 - 有关于此的任何想法吗?

1 回答

  • 1

    这看起来像你的连接字符串的问题 . 也许我错了,但它看起来像你所面临的错误是它没有找到服务器,并且基于错误它看起来几乎就像你只是传递给它的 Driver=SQL Anywhere 16 .

    我提到这是因为在这个问题中:Connecting to MS SQL Server with Windows Authentication using Python?

    它们详细说明了答案中多行上的字符串

    conn_str = (
    r'Driver={SQL Server};'
    r'Server=.\SQLEXPRESS;'
    r'Database=myDB;'
    r'Trusted_Connection=yes;'
    )
    

    cnxn = pyodbc.connect(conn_str)

    此外,在搜索多行字符串时,我们在此处看到此答案:How to correctly write a raw multiline string in Python?

    哪些细节:

    每个字符串文字都需要一个r前缀

    (r'on\e'
         r'\tw\o')
    'on\\e\\tw\\o'
    

    否则,第一部分被解释为原始字符串文字,但下一行字符串不是,因此'\ t'被解释为制表符 .

    因此,请尝试在文字字符串的每一行前加一个r,以使其更像

    import pyodbc
    import pandas as pd
    
    conn = pyodbc.connect(r'Driver={SQL Anywhere 16};'
                          r'Server=***.**.**.***;'
                          r'Database=**********;'
                          r'Trusted_Connection=yes;'
                          )
    
    Data = pd.read_sql_query("SELECT * FROM * WHERE Date='20180328'", conn)
    print(Data)
    

    并查看是否可以解决您的问题 .

    编辑:我编辑修复格式 .

相关问题