我正在尝试从Linux上的python(SLES)连接到MSSQL数据库.
我安装了pyodbc和Free TDS.从命令行:
tsql -H server -p 1433 -U username -P password
Run Code Online (Sandbox Code Playgroud)
但是,从Python连接到服务器没有问题:
import pyodbc
pyodbc.connect(driver='{FreeTDS}', server='server', database='database', uid='username', pwd='password')
Run Code Online (Sandbox Code Playgroud)
产生错误:
pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)
我发现这个错误无益于模糊.即使是缩小问题范围的建议也会有所帮助.
编辑:看看TDS日志转储,看起来这就是整个事情崩溃的地方:
token.c:328:tds_process_login_tokens()
util.c:331:tdserror(0x87bbeb8, 0x8861820, 20017, 115)
odbc.c:2270:msgno 20017 20003
util.c:361:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:384:tdserror: returning TDS_INT_CANCEL(2)
util.c:156:Changed query state from IDLE to DEAD
token.c:337:looking for login token, got 0()
token.c:122:tds_process_default_tokens() marker is 0()
token.c:125:leaving tds_process_default_tokens() connection dead
login.c:466:login packet accepted
util.c:331:tdserror(0x87bbeb8, 0x8861820, 20002, 0)
odbc.c:2270:msgno …Run Code Online (Sandbox Code Playgroud) 我应该使用什么库来连接到Windows上的python中的odbc?有关odbc的pywin32有什么好的选择吗?
我正在寻找记录良好,健壮,积极维护等等的东西pyodbc看起来很好 - 还有其他吗?
我正在使用Ubuntu 9.04
我安装了以下软件包版本:
unixodbc and unixodbc-dev: 2.2.11-16build3
tdsodbc: 0.82-4
libsybdb5: 0.82-4
freetds-common and freetds-dev: 0.82-4
Run Code Online (Sandbox Code Playgroud)
我这样配置/etc/unixodbc.ini:
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
UsageCount = 2
Run Code Online (Sandbox Code Playgroud)
我这样配置/etc/freetds/freetds.conf:
[global]
tds version = 8.0
client charset = UTF-8
Run Code Online (Sandbox Code Playgroud)
我已经抓住pyodbc修订31e2fae4adbf1b2af1726e5668a3414cf46b454f的http://github.com/mkleehammer/pyodbc,并使用安装了" python setup.py install"
我在我的本地网络上安装了一台安装了Microsoft SQL Server 2000的Windows机器,然后侦听本地IP地址10.32.42.69.我有一个名为"Common"的空数据库.我有用户"sa"密码"秘密"与完全权限.
我使用以下python代码来设置连接:
import pyodbc
odbcstring = "SERVER=10.32.42.69;UID=sa;PWD=secret;DATABASE=Common;DRIVER=FreeTDS"
con = pyodbc.connect(s)
cur = con.cursor()
cur.execute('''
CREATE …Run Code Online (Sandbox Code Playgroud) 有了这个表:
CREATE TABLE test_insert (
col1 INT,
col2 VARCHAR(10),
col3 DATE
)
Run Code Online (Sandbox Code Playgroud)
以下代码需要40秒才能运行:
import pyodbc
from datetime import date
conn = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};'
'SERVER=localhost;DATABASE=test;UID=xxx;PWD=yyy')
rows = []
row = [1, 'abc', date.today()]
for i in range(10000):
rows.append(row)
cursor = conn.cursor()
cursor.executemany('INSERT INTO test_insert VALUES (?, ?, ?)', rows)
conn.commit()
Run Code Online (Sandbox Code Playgroud)
psycopg2的等效代码只需3秒.我不认为mssql比postgresql慢得多.有关如何在使用pyodbc时提高批量插入速度的任何想法?
编辑:在ghoerz发现之后添加一些注释
在pyodbc中,流程executemany是:
在ceODBC,流程executemany是:
我正在尝试使用Python 3.3(Windows 7-64位)上的SQLAlchemy(使用pyodbc)连接到SQL Server 2012数据库.我能够使用直接pyodbc进行连接,但是在使用SQLAlchemy进行连接时却没有成功.我有数据库访问的dsn文件设置.
我使用这样的直接pyodbc成功连接:
con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn')
Run Code Online (Sandbox Code Playgroud)
对于sqlalchemy,我尝试过:
import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname')
Run Code Online (Sandbox Code Playgroud)
该create_engine方法实际上并没有建立连接并且成功,但是如果我尝试了导致sqlalchemy实际设置连接的东西(比如engine.table_names()),它需要一段时间但是然后返回此错误:
DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None
我不确定哪里出错是如何看到sqlalchemy实际传递给pyodbc的连接字符串.我已成功使用与SQLite和MySQL相同的sqlalchemy类.
提前致谢!
我有一个大约155,000行和12列的数据帧.如果我使用dataframe.to_csv将其导出到csv,则输出为11MB文件(即时生成).
但是,如果我使用to_sql方法导出到Microsoft SQL Server,则需要5到6分钟!没有列是文本:只有int,float,bool和日期.我见过ODBC驱动程序设置nvarchar(max)的情况,这会减慢数据传输速度,但这不是这种情况.
有关如何加快出口流程的任何建议?导出11 MB数据需要6分钟,这使得ODBC连接几乎无法使用.
谢谢!
我的代码是:
import pandas as pd
from sqlalchemy import create_engine, MetaData, Table, select
ServerName = "myserver"
Database = "mydatabase"
TableName = "mytable"
engine = create_engine('mssql+pyodbc://' + ServerName + '/' + Database)
conn = engine.connect()
metadata = MetaData(conn)
my_data_frame.to_sql(TableName,engine)
Run Code Online (Sandbox Code Playgroud) 我是linux世界的新手,我想从Python查询Microsoft SQL Server.我在Windows上使用它,它非常好,但在Linux中它非常痛苦.
几个小时后,我终于成功使用unixODBC在Linux Mint上安装Microsoft ODBC驱动程序.
然后,我用python 3环境设置了一个anaconda.
然后我这样做:
import pyodbc as odbc
sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL Server};Server=XXX;Database=YYY;Trusted_Connection=Yes")
Run Code Online (Sandbox Code Playgroud)
它返回:
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)
我没有遗忘的是,PyODBC似乎从odbcinst.ini读取了正确的文件路径,但仍然不起作用.
我去了"/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0",文件确实存在!
那为什么它告诉我它不存在?以下是一些可能的线索:
我不知道如何解决这些问题.
谢谢 !
我试图了解python如何将数据从FTP服务器提取到pandas然后将其移动到SQL服务器.我的代码至少可以说是非常简陋的,我正在寻找任何建议或帮助.我试图从FTP服务器首先加载数据工作正常....如果我然后删除此代码并将其更改为从ms sql服务器中选择它是好的所以连接字符串工作,但插入到SQL服务器似乎造成了问题.
import pyodbc
import pandas
from ftplib import FTP
from StringIO import StringIO
import csv
ftp = FTP ('ftp.xyz.com','user','pass' )
ftp.set_pasv(True)
r = StringIO()
ftp.retrbinary('filname.csv', r.write)
pandas.read_table (r.getvalue(), delimiter=',')
connStr = ('DRIVER={SQL Server Native Client 10.0};SERVER=localhost;DATABASE=TESTFEED;UID=sa;PWD=pass')
conn = pyodbc.connect(connStr)
cursor = conn.cursor()
cursor.execute("INSERT INTO dbo.tblImport(Startdt, Enddt, x,y,z,)" "VALUES (x,x,x,x,x,x,x,x,x,x.x,x)")
cursor.close()
conn.commit()
conn.close()
print"Script has successfully run!"
Run Code Online (Sandbox Code Playgroud)
当我删除ftp代码时,它运行完美,但我不明白如何进行下一次跳转以将其转换为Microsoft SQL服务器,或者即使可以在不先保存到文件中也是如此.
我试图用来pyobdc从paradox数据库中读取数据,并在尝试连接数据库时不断收到以下错误:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)
我曾尝试为数据库创建新的DNS链接,但它没有帮助.
我的系统链接如下所示:

我的代码是:
import os
import sys
import time
import pyodbc
LOCATION = "c:\Users\Marcello\Desktop\DATA\ScorMonitor.db"
cnxn = pyodbc.connect(r"Driver={{Microsoft Paradox Driver (*.db )}};Fil=Paradox 5.X;DefaultDir={0};Dbq={0}; CollatingSequence=ASCII;")
cursor = cnxn.cursor()
cursor.execute("select last, first from test")
row = cursor.fetchone()
print row
Run Code Online (Sandbox Code Playgroud) pyodbc是一个非常好的东西,但Windows安装程序只能使用他们非常具体的python版本.随着Python 3.4的发布,唯一可用的安装程序只有在注册表中看不到3.3时才会停止(尽管3.4肯定存在).
将.pyd和.egg-info文件从3.3安装复制到3.4 site-packages目录似乎没有办法解决问题.导入pyodbc时,抛出ImportError:ImportError: DLL load failed: %1 is not a valid Win32 application.
是否有一个秘密的酱可以添加,以使3.3文件正常工作?或者我们只需要等待3.4安装程序版本?
pyodbc ×10
python ×9
sql-server ×4
pandas ×2
sql ×2
sqlalchemy ×2
windows ×2
bulkinsert ×1
database ×1
linux ×1
odbc ×1
python-2.7 ×1
pywin32 ×1
t-sql ×1
unicode ×1
unixodbc ×1
utf-8 ×1