我正在尝试连接到Sybase数据库并从中检索数据。我正在安装Anaconda存储库的Ubuntu 18.04系统上工作,并希望使用Python 3.6。
我找到了一种使用python-sybase软件包从数据库中检索数据的方法,但这与python 2.7相关,并且就我现在而言已经过时了。
import Sybase
db = Sybase.connect(dsn = server:port, user = usr, passwd = pwd, database = db)
c = db.cursor()
c.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
list1 = c.fetchall()
print list1
此脚本的输出如下:
[(10.8, 100, 0), (11.2, 100, 5), (11.3, 100, 10), ..., ..., ...]
我尝试改用te pymssql软件包,该软件包与python 3.x兼容。
import pymssql
conn = pymssql.connect(server=serv:port,user=usr,password=pwd,database=db)
print(conn)
cursor = conn.cursor()
cursor.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
list2 = cursor.fetchall()
print(list2)
但是在尝试连接到数据库后已经得到以下错误消息,因为它不执行print(conn):
Traceback (most recent call last):
File "src/pymssql.pyx", line 636, in pymssql.connect
File "src/_mssql.pyx", line 1957, in _mssql.connect
File "src/_mssql.pyx", line 707, in _mssql.MSSQLConnection.__init__
_mssql.MSSQLDriverException: Could not set connection properties
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/progs/Test_SYBASE.py", line 9, in <module>
conn = pymssql.connect(server=serv,user=usr,password=pwd,database=db,port=prt)
File "src/pymssql.pyx", line 645, in pymssql.connect
pymssql.InterfaceError: Could not set connection properties
所以我的问题实际上与连接本身有关。
我在pymssql手册中阅读了有关错误消息的信息,但不知道如何处理。
例外_mssql.MSSQLDriverException _mssql中出现问题时,就会引发MSSQLDriverException-例如内存不足以存储数据结构,等等。
pypysql.InterfaceError异常
引发与数据库接口而不是数据库本身相关的错误。错误的子类。
您对如何处理有任何建议吗?
感谢帮助!
答案 0 :(得分:1)
找到了解决我的问题的方法: 如@GordThompson所建议,我使用pyodbc和FreeTDS进行连接。 我通过
安装了FreeTDS驱动程序sudo apt-get install freetds-dev freetds-bin unixodbc-dev tdsodbc
sudo dpkg-reconfigure tdsodbc
如此处建议:https://gist.github.com/rduplain/1293636
我要连接的代码如下:
import pyodbc
serv = server
usr = user
passwd = password
db = database
prt = port
driver="FreeTDS"
conn = pyodbc.connect(driver=driver, server=serv, database=db,port = prt,
uid=usr, pwd=passwd)
print(conn)
cursor = conn.cursor()
cursor.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
row = cursor.fetchall()
print(row)
编辑:在我的pymssql.connect()调用中使用conn_properties =''也可以正常工作,就像@GordThompson建议的那样。
import pymssql
conn =pymssql.connect(server=serv:port,user=usr,password=pwd,database=db, conn_properties='')
print(conn)
cursor = conn.cursor()
cursor.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
list2 = cursor.fetchall()
print(list2)
感谢您的帮助!