我有一个python程序从db2数据库调用存储过程.我results = cursor.fetchall()用来处理我的存储过程的结果.但是,我的存储过程返回两个游标.results只包含第一个.我需要一种方法来遍历尽可能多的游标.我希望fetchmany()这是我的答案,但事实并非如此.
我真的需要能够做多个结果集,因为我写的程序只能调用一个存储过程.要回去让它能够打两个电话需要很多.除了其中一件事,我需要让10个光标返回.一切都是动态的,因此应用程序不知道它正在运行什么程序,它只是获取数据并将其吐入excel而不知道其含义.我需要一个光标用于数据,而另一个光标用于不同类型的计数和总计.
请帮忙.让我知道如果你需要更多的信息,我不认为精心设计的代码是必要的,因为我正在寻找一个内置的功能来做到这一点,或者甚至可能是一个不同的库,因为我已经完成了我的谷歌搜索,它看起来像pyodbc不会为DB2做这件事.DB2是一个要求:(
我在pandas DataFrame中有一些基本信息.我需要加入一些我可以通过pyodbc连接访问的参考表.有没有办法将sql结果集放入pandas DataFrame而不先将结果集写入csv?
将这个额外的步骤输出到csv并进入DataFrame似乎是一种浪费.
我需要将pyodbc.Row转换为字符串。互联网提供了一些建议,但这些建议似乎都不适合我。
row = cursor.fetchone()
#unicodedata.normalize('NFKD', row).encode('ascii','ignore') #TypeError: must be unicode, not pyodbc.Row
#row.fieldname.encode('utf8') #AttributeError: 'pyodbc.Row' object has no attribute 'fieldname'
tblName = str(row)
tblName.replace("text:u","").replace("'","")
tblName = tblName.encode('utf-8')
print tblName
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了错误(以注释显示),或者似乎没有效果,如此处的输出所示:
(u'myTableName', ) # print tblName
Run Code Online (Sandbox Code Playgroud)
SQL是
tablesWithId = "select table_name \
from INFORMATION_SCHEMA.COLUMNS \
where COLUMN_NAME like 'MyId' "
cursor.execute(tablesWithId)
Run Code Online (Sandbox Code Playgroud)
Python 2.7
我有以下内容:
import pyodbc
# ODBC connection to database
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=CCSQLRESUME;DATABASE=ResumeStore;UID=ray;PWD=Yar!')
cursor = cnxn.cursor()
# SELECT resume data
cursor.execute(
"""SELECT
rbs.candidate_id,
rbs.[fileName],
rbs.resumeData,
rbs.docType
FROM [ResumeStore].[dbo].[ResumeBinaryStorage] as rbs (NOLOCK)
WHERE rbs.candidate_id = 5078707"""
)
Run Code Online (Sandbox Code Playgroud)
在查询时,数据resumeData已存储在bytearray类似的内容中:bytearray(b'\xef\xbb\xbf<html><body><h1><b>Ray Bao</b></h1><h2>')
我想要一个for循环遍历上面的光标并resumeData使用给定的列将列写入本地存储fileName.
for row in cursor:
#
# Write to file...
#
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我正在运行一个heroku应用程序,并使用pyODBC.
当我尝试在我的heroku服务器上安装pyodbc时出现此错误.
当我尝试将pyodbc放在requirements.txt文件中时,会发生同样的事情.
我根本不明白该怎么做这个错误,我似乎无法通过windows heroku toolbelt找到如何在heroku服务器上使用sudo apt-get等命令.
这是错误过程.
C:\Users\mads\businesszone>heroku run pip install pyodbc
Running pip install pyodbc on businesszone... up, run.9537
Collecting pyodbc
Downloading pyodbc-3.0.10.tar.gz (68kB)
100% |????????????????????????????????| 71kB 4.3MB/s
Installing collected packages: pyodbc
Running setup.py install for pyodbc ... error
Complete output from command /app/.heroku/python/bin/python -u -c "import se
tuptools, tokenize;__file__='/tmp/pip-build-jJIUQ3/pyodbc/setup.py';exec(compile
(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file_
_, 'exec'))" install --record /tmp/pip-J0_eAS-record/install-record.txt --single
-version-externally-managed --compile:
running install
running build
running build_ext
building 'pyodbc' extension
creating build
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/tmp …Run Code Online (Sandbox Code Playgroud) 背景故事: 我从事财务工作(不是开发人员,因此非常感谢帮助),我的部门目前严重依赖 excel 和 vba 来尽可能多地自动化我们的任务。该公司刚刚验证了一个 python 发行版,我们现在可以使用它,所以我只是想尝试一下。
挑战: 我的第一个挑战是将 CSV 文件加载到 MSAcess 数据库中(因为并非所有人都精通技术,可以纯粹使用开发工具和数据库进行工作,因此需要让每个人都轻松完成工作)。
我可以在互联网上找到零碎的不同 ppl 代码,我可以将它们放在一起,它可以工作,但结果却变成了弗兰肯斯坦。
它在做什么以及为什么:
TL;DR:
当前的代码是不同代码的拼凑而成,它既丑陋又缓慢,您会更改什么以使其更有效/优化它?
目标是拥有一个将 CSV 加载到 .mdb 的代码,可能使用正确的数据类型来创建表。
import csv
import pyodbc
import pandas
import pandas.io.sql
import sqlite3
import tempfile
import time
import string
def load_csv_to_access(access_path, table_name, csv_path, skip_rows):
# open CSV file, load to a variable, output to …Run Code Online (Sandbox Code Playgroud) 我正在使用 Pyodbc,并且已连接到数据库。我可以轻松地提取仅使用 SELECT 和 FROM 语句的数据。
但是,当我尝试使用 WHERE 语句时,它会抛出语法错误:
这是代码:
import pyodbc
conn = pyodbc.connect('DSN=QueryBuilder')
cursor = conn.cursor()
cursor.execute('SELECT * FROM dbo.Grantinformation WHERE HoldingOrganisationName = 'university of edinburgh'')
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
语法错误:无效语法
如果我运行:
SELECT *
FROM dbo.Grantinformation
WHERE HoldingOrganisationName = 'university of edinburgh'
Run Code Online (Sandbox Code Playgroud)
在 SQL Server Management Studio 中,SQL 运行良好,所以很明显我在使用 pyodbc 时做错了什么?
非常感谢
我连接到两个数据库,第一个使用“SQL Server 身份验证”,第二个使用“Active Directory 通用身份验证”。
在 Win 7、python 2.7.12、pyodbc v4.0.17 上运行它,安装了 Microsoft Online Services 登录助手,我通常从 MSSMS 2016 访问数据库。
对于第一个数据库,我使用以下方法,该方法有效:
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=ourDatabase.database.windows.net;PORT=1433;DATABASE=ourDataBaseName;UID=USERID;PWD=PASSWORD')
Run Code Online (Sandbox Code Playgroud)
第二个数据库我已经尝试了所有这些,但都不起作用:
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=.\ourDatabase.database.windows.net;DATABASE=ourDataBaseName;UID=user@companydomain.com;PWD=MyPass;Trusted_Connection=yes')
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=ourDatabase.database.windows.net;DATABASE=ourDataBaseName;UID=user@companydomain.com;PWD=MyPass;Trusted_Connection=yes')
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=ourDatabase.database.windows.net;DATABASE=ourDataBaseName;UID=user;PWD=MyPass;Trusted_Connection=yes')
cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=.\ourDatabase.database.windows.net;DATABASE=ourDataBaseName;UID=user@companydomain.com;PWD=MyPass;Trusted_Connection=yes')
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
highscore= score
cursor.execute("insert into tble values (hscore) hishscore.getvalue"):
Run Code Online (Sandbox Code Playgroud)
que:score 将保存为变量 highscore。该高分需要保存到字段 hscore 中的数据库中。插入和获取价值的正确代码是什么。
import pyodbc
con=pyodbc.connect('Driver={SQL Server};Server=New;Database=Countrydatabase;Trusted_connection=yes')
cur=con.cursor()
cur.execute("TRUNCATE Countrydatabase..region")
con.close()
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 pyodbc 模块截断表。但它不断抛出错误。
回溯(最近一次通话):文件“C:/Users/sean/Desktop/script.py”,第 6 行,在 cur.execute("TRUNCATE Countrydatabase..region") pyodbc.ProgrammingError: ('42000', " [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]'Countrydatabase' 附近的语法不正确。(102) (SQLExecDirectW)")
当我使用“SELECT”语句时,相同的代码工作正常。