标签: pyodbc

使用 pyodbc 连接到 Db2 for IBM i 时遇到问题

我正在尝试使用 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 db2 pyodbc ibm-midrange

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

如何使用Python异步查询Azure SQL数据库?

我陷入困境,无法找到使用 Python 异步连接到 Azure SQL 数据库的可行方法。

我已经尝试过asynciopyodbcasyncpg没有成功。

这已经很接近了...

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

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

生成PyODBC查询作为词典的更一般方法?

以下是我根据数据库查询结果创建字典的通用类方法:

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 database dictionary pyodbc

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

使用pyodbc时SQL查询失败,但在SQL中有效

我在应该是一个非常简单的脚本时遇到一些麻烦.我只是尝试使用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 sql sql-server pyodbc

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

使用pyodbc处理Access中的日期,给出"参数太少"错误

我使用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)

python sql ms-access pyodbc ms-access-2013

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

如果我将上下文管理器与pyodbc游标一起使用,是否会在发生错误时回滚?

我尝试阅读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 odbc transactions rollback pyodbc

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

将sqlalchemy连接到mssql时出错"不支持ODBC数据类型-150"

尝试将python sqlalchemy连接到msssql服务器/数据库时,我一直遇到一个奇怪的错误.我需要使用sqlalchemy(从我被告知)将pandas数据帧连接到mssql的唯一方法.

我尝试过两种不同的方式连接sqlalchemy:

  1. 使用完整连接字符串:

    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)
  2. 使用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)

python sql-server sqlalchemy pyodbc

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

pyodbc:如何重试从瞬态错误中恢复?

我在Flask上托管了一个API.它运行在Tornado服务器后面.发生的事情是,有时在UI上进行的更改不会反映在数据库中.我运行的一些脚本也提供了以下3个错误中的任何一个:

  1. pyodbc.Error:('08S01','[08S01] [Microsoft] [ODBC SQL Server驱动程序]通信链接失败(0)(SQLExecDirectW)')
  2. pyodbc.Error:('01000','[01000] [Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] ConnectionWrite(send()).(10054)(SQLExecDirectW)')
  3. pyodbc.Error:('01000','[01000] [Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] ConnectionRead(recv()).(10054)(SQLExecDirectW)')

这是我的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处理瞬态错误.请帮忙.

python sql-server azure pyodbc azure-sql-database

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

pyodbc:查询结果为CSV?

我正在使用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)

python pyodbc

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

使用pypyodbc,pymssql和pyodbc的优点和缺点是什么?

我知道Pypyodbc是Pyodbc的较新版本。之前有人问过这两个之间的比较问题,但我想将Pymssql添加到混合中。

python sql-server pyodbc pymssql pypyodbc

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