标签: pyodbc

是什么导致pyodbc"无法连接到数据源"?

我正在尝试从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)

python t-sql database database-connection pyodbc

25
推荐指数
4
解决办法
3万
查看次数

在Windows上从python连接到odbc的常用方法?

我应该使用什么库来连接到Windows上的python中的odbc?有关odbc的pywin32有什么好的选择吗?

我正在寻找记录良好,健壮,积极维护等等的东西pyodbc看起来很好 - 还有其他吗?

python windows odbc pywin32 pyodbc

23
推荐指数
3
解决办法
3万
查看次数

在linux上使用pyodbc在nvarchar mssql字段中插入unicode或utf-8字符

我正在使用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修订31e2fae4adbf1b2af1726e5668a3414cf46b454fhttp://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)

python sql-server unicode utf-8 pyodbc

21
推荐指数
1
解决办法
2万
查看次数

pyodbc - 非常慢的批量插入速度

有了这个表:

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是:

  • 准备声明
  • 绑定所有参数
  • 执行

sql-server bulkinsert pyodbc

21
推荐指数
2
解决办法
1万
查看次数

使用sqlalchemy和pyodbc连接到SQL Server 2012

我正在尝试使用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类.

提前致谢!

python sql-server sqlalchemy pyodbc

21
推荐指数
4
解决办法
6万
查看次数

使用sqlalchemy的python pandas to_sql:如何加快导出到MS SQL?

我有一个大约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)

python sql sqlalchemy pyodbc pandas

21
推荐指数
7
解决办法
2万
查看次数

PyODBC:即使它存在也无法打开驱动程序

我是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 linux sql-server unixodbc pyodbc

21
推荐指数
2
解决办法
1万
查看次数

使用PYODBC从pandas获取数据到SQL服务器

我试图了解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服务器,或者即使可以在不先保存到文件中也是如此.

python sql pyodbc pandas

20
推荐指数
3
解决办法
6万
查看次数

Pyodbc错误找不到数据源名称,并且没有指定默认驱动程序的paradox

我试图用来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链接,但它没有帮助.

我的系统链接如下所示:

这就是系统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)

python windows pyodbc python-2.7

20
推荐指数
3
解决办法
6万
查看次数

Windows上的pyodbc和python 3.4

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安装程序版本?

python pyodbc

19
推荐指数
2
解决办法
2万
查看次数