我正在尝试使用 pyodbc 和 ibm db2 odbc 驱动程序通过 db2 连接到 as400。
import pyodbc
connection = pyodbc.connect(
driver='{IBM DB2 ODBC DRIVER}',
system='192.168.1.100',
uid='user',
pwd='pass')
c1 = connection.cursor()
#this is meaningless sql, i just want the connection
c1.execute('select * from libname.filename')
for row in c1:
print (row)
Run Code Online (Sandbox Code Playgroud)
运行这个给我这个错误
python pydata.py
Traceback (most recent call last):
File "C:\Users\tca\Desktop\ScriptingSTuff\pydata.py", line 3, in <module>
connection = pyodbc.connect(
pyodbc.OperationalError: ('08001', '[08001] [IBM][CLI Driver] SQL1013N The database alias name or database name "" could not be found. SQLSTATE=42705\r\n …Run Code Online (Sandbox Code Playgroud) 我陷入困境,无法找到使用 Python 异步连接到 Azure SQL 数据库的可行方法。
我已经尝试过asyncio,pyodbc但asyncpg没有成功。
我想这已经很接近了...
import asyncio
import pyodbc
async def query_azure_sql_db():
connection_string = 'Driver={ODBC Driver 17 for SQL Server};Server=tcp:<mySERVER>.database.windows.net,1433;Database=sqldbstockdata;Uid=<myUN>;Pwd=<myPW>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'
async with pyodbc.connect(connection_string) as conn:
async with conn.cursor() as cursor:
query = 'SELECT * FROM dbo.<myTABLE>'
await cursor.execute(query)
results = cursor.fetchall()
return results
loop = asyncio.get_event_loop()
results = loop.run_until_complete(query_azure_sql_db())
print(results)
Run Code Online (Sandbox Code Playgroud)
但会导致这个神秘的错误:AttributeError: __aenter__
我对其他图书馆持开放态度。
任何帮助表示赞赏。
python asynchronous pyodbc python-asyncio azure-sql-database
以下是我根据数据库查询结果创建字典的通用类方法:
def make_schema_dict(self):
schema = [i[2] for i in self.cursor.tables()
if i[2].startswith('tbl_') or i[2].startswith('vw_')]
self.schema = {table: {'scheme': [row.column_name for row
in self.cursor.columns(table)]}
for table in schema}
def last_table_query_as_dict(self, table):
return {'data': [{col: row.__getattribute__(col) for col in self.schema[table]['scheme']
if col != 'RowNum'} for row in self.cursor.fetchall()]}
Run Code Online (Sandbox Code Playgroud)
不幸的是,你可以看到,有许多并发症.
例如,查询多个表时; 一些hackish lambdas需要生成结果字典.
你能想到一些更通用的方法吗?
我在应该是一个非常简单的脚本时遇到一些麻烦.我只是尝试使用Python pyodbc模块创建一个新的SQL Server数据库.我试图传入的"sqlcommand"参数在我在SQL Server 2012中执行时工作得很好,但它从这个python脚本失败了.不知道出了什么问题,谁有任何想法?
import pyodbc, os
def create_db(folder, db_name):
unc = r'\\arcsql\SDE\{0}'.format(folder)
if not os.path.exists(unc):
os.makedirs(unc)
full_name = os.path.join(r'E:\SDE', folder, db_name)
conn = pyodbc.connect("driver={SQL Server}; server=ArcSQL; database=master; Trusted_Connection=yes", automcommit=True)
cursor = conn.cursor()
sqlcommand = """USE [master]
GO
CREATE DATABASE [{0}] ON PRIMARY
( NAME = N'{0}', FILENAME = N'{1}.mdf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = 1MB )
LOG ON
( NAME = N'{0}_log', FILENAME = N'{1}_log.ldf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = …Run Code Online (Sandbox Code Playgroud) 我使用Python进行pyodbc导入.
我使用的是Microsoft Office 2013 64bit.
我正在尝试查询accdb数据库以选择范围内的不同日期并将它们分配给游标,以便我可以将它们附加到列表中.
我的Access数据库有一个名为Closing_prices的表,以及一个名为Date_的列,其数据类型为"Date/Time".
我的代码如下:
cursor=conx.cursor()
query="select distinct Date_ FROM Closing_prices where Date_ >= '10/8/2011' and Date_ < '30/04/2014'"
cursor.execute(query)
dates=list()
for date in cursor:
dates.append(date[0])
Run Code Online (Sandbox Code Playgroud)
但是我收到错误消息:
Traceback (most recent call last):
File "C:/Users/Stuart/PycharmProjects/untitled/Apache - Copy.py", line 20, in <module>
cursor.execute(query)
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')
Run Code Online (Sandbox Code Playgroud)
由于Date_是一个日期时间,我也尝试过:
query="select distinct Date_ FROM Closing_prices where Date_ >= '10/8/2011 00:00:00' and Date_ < '30/04/2014 00:00:00'"
Run Code Online (Sandbox Code Playgroud)
当我跑:
cursor = conx.cursor()
query="select Date_ …Run Code Online (Sandbox Code Playgroud) 我尝试阅读pyodbc源代码,但这全都是C ++代码(我不擅长C ++)。我需要知道以下语句的行为:
with connection.cursor() as cursor:
cursor.execute(query_1) #inserts some stuff into table A
cursor.execute(query_2) #inserts some stuff into table B, but throws an error
with connection.cursor() as cursor2:
cursor.execute(select_query_1) #selects from table A
cursor.execute(select_query_2) #selects from table B
Run Code Online (Sandbox Code Playgroud)
这是我们尚未提交的同一连接-我很好奇,是否从表A中进行选择是否将提供插入到第一个游标中的新值-或query_2中的错误是否导致第一个游标的工作被滚动返回表A。
尝试将python sqlalchemy连接到msssql服务器/数据库时,我一直遇到一个奇怪的错误.我需要使用sqlalchemy(从我被告知)将pandas数据帧连接到mssql的唯一方法.
我尝试过两种不同的方式连接sqlalchemy:
使用完整连接字符串:
import sqlalchemy as sa
import urllib.parse as ulp
usrCnnStr = r'DRIVER={SQL Server};SERVER=myVoid\MYINSTANCE;Trusted_Connection=yes;'
usrCnnStr = ulp.quote_plus(usrCnnStr)
usrCnnStr = "mssql+pyodbc:///?odbc_connect=%s" % usrCnnStr
engine = sa.create_engine(usrCnnStr)
connection = engine.connect()
connection.execute("select getdate() as dt from mydb.dbo.dk_rcdtag")
connection.close()
Run Code Online (Sandbox Code Playgroud)使用DSN:
import sqlalchemy as sa
import urllib.parse as ulp
usrDsn = 'myDb'
params = ulp.quote_plus(usrDsn)
engine = sa.create_engine("mssql+pyodbc://cryo:pass@myDb")
conn = engine.connect()
conn.execute('select getdate() as dt')
conn.close()
Run Code Online (Sandbox Code Playgroud)两种方法都返回相同的错误:
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('ODBC data type -150 is not supported. Cannot read column .', 'HY000') [SQL: "SELECT …Run Code Online (Sandbox Code Playgroud) 我在Flask上托管了一个API.它运行在Tornado服务器后面.发生的事情是,有时在UI上进行的更改不会反映在数据库中.我运行的一些脚本也提供了以下3个错误中的任何一个:
这是我的Flask API代码的片段:
class Type(Resource):
def put(self):
parser = reqparse.RequestParser()
parser.add_argument('id', type = int)
parser.add_argument('type', type = int)
args = parser.parse_args()
query = """
UPDATE myDb SET Type = ? WHERE Id = ?
"""
connection = pyodbc.connect(connectionString)
cursor = connection.cursor()
cursor.execute(query, [args['type'], args['id']])
connection.commit()
cursor.close()
connection.close()
api.add_resource(Type, '/type')
Run Code Online (Sandbox Code Playgroud)
我可以在cursor.execute行上添加任何重试逻辑吗?我不知道如何使用python处理瞬态错误.请帮忙.
我正在使用pyodbc访问数据库并打印查询结果.
如何使用pyodbc将整个查询结果(包括列)打印到csv文件?
码:
import pyodbc
cnxn = pyodbc.connect(
#DATA BASE NAME IS HERE, HID FOR PRIVACY )
cursor = cnxn.cursor()
cursor.execute(""" #COMMAND GOES HERE """)
row = cursor.fetchall() #FETCHES ALL ROWS
cnxn.commit()
cnxn.close()
Run Code Online (Sandbox Code Playgroud) 我知道Pypyodbc是Pyodbc的较新版本。之前有人问过这两个之间的比较问题,但我想将Pymssql添加到混合中。
pyodbc ×10
python ×10
sql-server ×4
sql ×2
asynchronous ×1
azure ×1
database ×1
db2 ×1
dictionary ×1
ibm-midrange ×1
ms-access ×1
odbc ×1
pymssql ×1
pypyodbc ×1
rollback ×1
sqlalchemy ×1
transactions ×1