我正在使用python\pyodbc,并希望访问存储过程的第二个结果集.就我所知,pyodbc不支持多个结果集.此外,我无法修改存储过程.是否有任何选项可以使用SQL或其他一些解决方法来访问第二个结果集?也许创建第二个存储过程只返回第一个的第二个结果集?
我正在使用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) 我在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连接-没有成功.似乎这是不可能的,没有任何作用.
我正在尝试使用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) 我需要使用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) 我在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脚本使用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) 我正在尝试使用pyodbc打印前10行.我知道如何使用以下内容获取第一条记录:
row = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
我尝试将其更改为:
row = cursor.fetchten()
Run Code Online (Sandbox Code Playgroud)
但这没用.还有什么我可以做的吗?
我在SQL Server中使用一个查询,需要一个范围来检查一个数字是否在该范围内(例如在下面检查是否DemographicGroupDimID是(1,2或3).在做了一些谷歌搜索之后我找到的唯一方法能够做到这一点如下:
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) 背景:我已经待了大约一个星期,但仍然没有运气.我的系统(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) pyodbc ×10
python ×8
sql ×5
sql-server ×5
64-bit ×1
activepython ×1
amazon-ec2 ×1
fetch ×1
freetds ×1
iodbc ×1
macos ×1
ms-access ×1
pandas ×1
pypyodbc ×1
python-2.7 ×1
ubuntu-16.04 ×1