标签: pyodbc

使用SQL或其他解决方法访问存储过程的第二个结果集?Python的\ pyodbc

我正在使用python\pyodbc,并希望访问存储过程的第二个结果集.就我所知,pyodbc不支持多个结果集.此外,我无法修改存储过程.是否有任何选项可以使用SQL或其他一些解决方法来访问第二个结果集?也许创建第二个存储过程只返回第一个的第二个结果集?

python sql pyodbc

9
推荐指数
2
解决办法
3535
查看次数

使用pyodbc和SQL Server的SQL IN运算符

我正在使用pyodbc查询SQL Server数据库

import datetime
import pyodbc    
conn = pyodbc.connect("Driver={SQL Server};Server='dbserver',Database='db',
                       TrustedConnection=Yes")
cursor = conn.cursor()
ratings = ("PG-13", "PG", "G")
st_dt = datetime(2010, 1, 1)
end_dt = datetime(2010, 12, 31)
cursor.execute("""Select title, director, producer From movies 
                Where rating In ? And release_dt Between ? And ?""", 
                ratings, str(st_dt), str(end_dt))
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误.元组参数是否需要以不同的方式处理?有没有更好的方法来构建此查询?

('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Line 9: 
  Incorrect syntax near '@P1'. (170) (SQLExecDirectW); 
  [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]
  Statement(s) could not be prepared. (8180)")
Run Code Online (Sandbox Code Playgroud)

更新:

我能够使用字符串格式化运算符使这个查询工作,这不是理想的,因为它引入了安全性问题.

import datetime
import …
Run Code Online (Sandbox Code Playgroud)

python sql pyodbc

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

使用pyodbc连接到MS Access 2007(.accdb)数据库

我在Win7 x64上,使用Python 2.7.1 x64.我正在将我在VC++中创建的应用程序移植到Python中,用于教育目的.
使用以下连接字符串连接到MS Access 2007格式DB文件时,原始应用程序没有问题:
OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
现在,当我尝试使用pyodbc和以下连接到Python中的同一个DB文件(放入C:\这次)时conenction字符串:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
,也不管我是否保留OLEDB提供商或我使用Provider=MSDASQL;提到这里(MS提到它不是availiable 64位),我不断收到以下错误:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')

什么可能导致这个问题?

ADD:我已经更仔细地研究了pyodbc文档并尝试了conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;")- 同样的错误.这真的很奇怪,因为pyodbc.dataSources()表明我有这个提供者.

ADD2:我想win32com.client使用如这里为了使用OLE DB连接-没有成功.似乎这是不可能的,没有任何作用.

python 64-bit ms-access pyodbc

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

在Mac上使用iODBC连接到MS SQL Server

我正在尝试使用iODBC从我的Mac开发机器连接到Microsoft SQL Server.无论我做什么,我都会收到Unable to connect to data sourceFreeTDS驱动程序的错误消息.在查阅了各种手册,博客文章和StackOverflow问题之后,我就完蛋了.

我正在使用Mac OS X 10.7.4,通过Homebrew安装FreeTDS版本0.91.这是我正在做的事情:

$ brew install freetds
$ mkvirtualenv odbc
$ workon odbc
$ pip install pyodbc

$ tsql -H localhost -U mydbusername -P mydbpassword -p 1433 
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> quit
Run Code Online (Sandbox Code Playgroud)

以上连接和工作,但:

$ iodbctest
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0607.1008

Enter ODBC connect string (? shows list): driver={TDS};server=localhost;uid=mydbusername;pwd=mydbpassword;database=mydbname
1: SQLDriverConnect = [FreeTDS][SQL Server]Unable …
Run Code Online (Sandbox Code Playgroud)

sql-server macos pyodbc freetds iodbc

9
推荐指数
1
解决办法
5199
查看次数

使用pypyodbc连接到SQL Server

我需要使用Python 2.7将unicode发送到SQL Server.我用pymssql失败了.我现在正努力pypyodbc工作(而不是pyodbc),因为它提供了工作的unicode示例.问题是示例中的连接字符串看起来不像我认识的任何东西.我看了这个,经过一些试验和错误,构造了这个字符串:

conn = pypyodbc.connect("DRIVER={SQL Server};SERVER='MyServer';UID='me';PWD='MyPassword';DATABASE='db'")
Run Code Online (Sandbox Code Playgroud)

重新DatabaseError关注连接字符串:

C:\Anaconda\lib\site-packages\pypyodbc.pyc in __init__(self, connectString, autocommit, ansi, timeout, unicode_results, readonly, **kargs)
---> 2 conn = pypyodbc.connect("DRIVER={SQL Server};SERVER='MyServer';UID='me';PWD='password';DATABASE='db'")

C:\Anaconda\lib\site-packages\pypyodbc.pyc in __init__(self, connectString, autocommit, ansi, timeout, unicode_results, readonly, **kargs)
---> 2273         self.connect(connectString, autocommit, ansi, timeout, unicode_results, readonly)

C:\Anaconda\lib\site-packages\pypyodbc.pyc in connect(self, connectString, autocommit, ansi, timeout, unicode_results, readonly)
---> 2321         check_success(self, ret)

C:\Anaconda\lib\site-packages\pypyodbc.pyc in ctrl_err(ht, h, val_ret, ansi)
---> 919                 raise DatabaseError(state,err_text)

DatabaseError: (u'08001', u'[08001] …
Run Code Online (Sandbox Code Playgroud)

sql-server pyodbc python-2.7 pypyodbc

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

在Windows 7上无法使用pyodbc建立与sql-server的连接

我在Windows 7上使用ActivePython 2.7.2.5.

在尝试使用以下代码使用pyodbc模块连接到sql-server数据库时,我会收到后续的Traceback.关于我做错了什么的任何想法?

码:

import pyodbc
driver = 'SQL Server'
server = '**server-name**'
db1 = 'CorpApps'
tcon = 'yes'
uname = 'jnichol3'
pword = '**my-password**'

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
cursor = cnxn.cursor()
cursor.execute("select * from appaudit_q32013")
rows = cursor.fetchall()
for row in rows:
    print row
Run Code Online (Sandbox Code Playgroud)

追溯:

Traceback (most recent call last):
  File "pyodbc_test.py", line 9, in <module>
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC …
Run Code Online (Sandbox Code Playgroud)

python sql sql-server pyodbc activepython

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

make python等待存储过程完成执行

我有一个python脚本使用pyodbc来调用MSSQL存储过程,如下所示:

cursor.execute("exec MyProcedure @param1 = '" + myparam + "'")
Run Code Online (Sandbox Code Playgroud)

我在循环中调用这个存储过程,我注意到有时,在最后一次执行完程序之前,会再次调用该过程.我知道这个,因为如果我添加这条线

time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

在执行行之后,一切正常.

有没有更优雅,更省时的方式来说,"睡觉直到执行完毕"?

更新(Divij的解决方案):此代码目前不适用于我:

from tornado import gen
import pyodbc

@gen.engine
def func(*args, **kwargs):
    # connect to db
    cnxn_str = """
    Driver={SQL Server Native Client 11.0};
    Server=172.16.111.235\SQLEXPRESS;
    Database=CellTestData2;
    UID=sa;
    PWD=Welcome!;
    """
    cnxn = pyodbc.connect(cnxn_str)
    cnxn.autocommit = True
    cursor = cnxn.cursor()
    for _ in range(5):
        yield gen.Task(cursor.execute, 'exec longtest')

    return

func()
Run Code Online (Sandbox Code Playgroud)

python sql sql-server stored-procedures pyodbc

9
推荐指数
2
解决办法
5515
查看次数

Pyodbc - 打印前10行(python)

我正在尝试使用pyodbc打印前10行.我知道如何使用以下内容获取第一条记录:

row = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

我尝试将其更改为:

row = cursor.fetchten()
Run Code Online (Sandbox Code Playgroud)

但这没用.还有什么我可以做的吗?

python pyodbc fetch

9
推荐指数
2
解决办法
4050
查看次数

使用params从SQL Server读取:pandas(或pyodbc)无法正常运行

我在SQL Server中使用一个查询,需要一个范围来检查一个数字是否在该范围内(例如在下面检查是否DemographicGroupDimID是(1,2或3).在做了一些谷歌搜索之后我找到的唯一方法能够做到这一点如下:

SQL

DECLARE @adults table (Id int)
INSERT INTO @adults VALUES (1), (2), (3)

SELECT [date], [station], [impression] = SUM([impressions]) / COUNT(DISTINCT [datetime] )
       FROM 
       (SELECT [datetime] = DATEADD(minute,td.Minute,DATEADD(hour,td.NielsenLocalHour,CONVERT(smalldatetime, ddt.DateKey))), [date] = ddt.DateKey, [station] = nd.Name, [impressions] = SUM(naf.Impression)
       FROM [Nielsen].[dbo].[NielsenAnalyticsFact] as naf
       LEFT JOIN [dbo].[DateDim] AS ddt
       ON naf.StartDateDimID = ddt.DateDimID
       LEFT JOIN [dbo].NetworkDim as nd
       ON naf.NetworkDimID = nd.NetworkDimID
       LEFT JOIN [dbo].TimeDim as td
       ON naf.QuarterHourDimID = td.TimeDimID
       WHERE (naf.NielsenMarketDimID = 1
                     AND naf.RecordTypeDimID = …
Run Code Online (Sandbox Code Playgroud)

python sql sql-server pyodbc pandas

9
推荐指数
1
解决办法
4768
查看次数

在AWS E2 ubuntu实例上连接时,SQL Server的ODBC驱动程序13无法在pyodbc上打开lib

背景:我已经待了大约一个星期,但仍然没有运气.我的系统(Ubuntu 16.04.1 LTS)上的相同驱动程序(13.0)与我的pyodbc python(Python 2.7.12 :: Anaconda 4.1.1(64位))库一起正常工作.我尝试在AWS E2上设置虚拟机,但它不能在那里工作,如下所述.

目标:使用Amazon上的Python 2.7.12 :: Anaconda 4.2.0 (64-bit)官方ODBC驱动程序在Amazon Ubuntu 16.04.1 LTS(GNU/Linux 4.4.0-53-generic x86_64)上连接到Azure SQL Server

问题:我尝试在AWS E2 Ubuntu 16.04.1 LTS(GNU/Linux 4.4.0-53-generic x86_64)映像上使用Microsoft的ODBC官方ODBC驱动程序13将pyodbc连接到azure sql但最终总是出现错误:

使用完整的连接字符串:

$ python
Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jul  2 2016, 17:42:40) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and …
Run Code Online (Sandbox Code Playgroud)

python amazon-ec2 pyodbc azure-sql-database ubuntu-16.04

9
推荐指数
1
解决办法
4958
查看次数