Python - 用于SQL Anywhere 16的Pyodbc?

时间:2018-03-29 11:37:45

标签: python pyodbc

我正在尝试使用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连接通过Squirrel SQL连接 - 有关于此的任何想法吗?

1 个答案:

答案 0 :(得分: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)

然后查看是否可以解决您的问题。

编辑:我进行了编辑以修复格式。