我有一个使用 mssql 的 python 应用程序 - 我正在尝试 pyodbc,而不是使用 pymssql。在 Windows 本地计算机中运行应用程序时似乎没有问题。在打包为容器的开发环境中部署应用程序时,我看到以下错误。
from pyodbc import Error
2017-04-14T13:58:28.858638588Z ImportError: Error loading shared library libodbc.so.2: No such file or directory (needed by /usr/local/lib/python3.5/site-packages/pyodbc.cpython-35m-x86_64-linux-gnu.so)
Run Code Online (Sandbox Code Playgroud)
该文档要求我安装数据库驱动程序和 pyodbc。
我目前正在使用 Apple Silicon 的 2021 款 MacBook Pro 上开发 Python (3.8) 项目。最终,目标是使用 Apple 的 Tensorflow fork 从 Azure SQL DB 读取的数据构建 ML 模型。因此,我正在本地 Apple Silicon 包上开发该项目 - 不使用 Rosetta。
当我尝试导入 pyodbc 包(4.0.30)以连接到我的数据库时,出现了问题。我不断收到以下错误
File "<stdin>", line 1, in <module>
ImportError: dlopen({myvenv}/lib/python3.8/site-packages/pyodbc.cpython-38-darwin.so, 2):
Symbol not found: _SQLAllocHandle
Referenced from: {myvenv}/lib/python3.8/site-packages/pyodbc.cpython-38-darwin.so
Expected in: flat namespace
in {myvenv}/lib/python3.8/site-packages/pyodbc.cpython-38-darwin.so
Run Code Online (Sandbox Code Playgroud)
然而,如果我使用 Rosetta 做同样的事情,一切都会正常。我找不到任何其他线程描述类似的行为。
有谁知道如何解决这个问题?
我正在尝试使用pyodbc使用python在MS Access DB中创建表,但是当我运行我的脚本时,没有创建表并且没有给出错误.我的代码:
#!/usr/bin/env python
import pyodbc
con = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=Z:\Data\Instruments\testDB.accdb; Provider=MSDASQL;')
cur = con.cursor()
string = "CREATE TABLE TestTable(symbol varchar(15), leverage double, shares integer, price double)"
cur.execute(string)
Run Code Online (Sandbox Code Playgroud)
可能有什么不对?
您好,我正在尝试从 linux(ubuntu 服务器)的 sql 服务器读取数据帧。文件(gscm.ppk)中有管理密钥
我使用以下格式连接到 sql server:
import urllib.parse
import pandas as pd
import sqlalchemy as sa
params = urllib.parse.quote_plus(
"DRIVER={SQL Server Native Client 11.0};"
"SERVER=dagger;"
"DATABASE=test;"
"UID=ubuntu;"
)
engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
df = pd.read_sql("SELECT * FROM ROBALS", engine)
Run Code Online (Sandbox Code Playgroud)
我不断收到此错误:
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('01000', "[01000] [unixODBC]
[Driver Manager]Can't open lib 'SQL Server' : file not found (0)
(SQLDriverConnect)")
(Background on this error at: https://sqlalche.me/e/14/dbapi)
Run Code Online (Sandbox Code Playgroud)
我已经下载了Ubuntu 20.04附带的驱动程序
我在python 2.6上使用pyodbc连接到Microsoft SQL Server 2005.我打开一个连接,创建几个游标:
c1 = connection.cursor()
c2 = connection.cursor()
Run Code Online (Sandbox Code Playgroud)
然后对第一个游标运行查询.
c1.execute("select * from foo")
Run Code Online (Sandbox Code Playgroud)
现在我在第二个游标上运行一个查询:
c2.execute("select * from bar")
Run Code Online (Sandbox Code Playgroud)
...我收到一个错误:"连接忙于另一个hstmt的结果."
我做了之后c1.fetchall()或者c1.close()我可以使用c2.
我的问题是:为什么我甚至被允许在连接上创建多个游标,如果我只允许一次使用一个游标,并且同一个游标总是可以重用?并且,如果我想为另一个查询的结果的每一行运行查询,如下所示:
for x in c1.execute(...):
for y in c2.execute(...):
Run Code Online (Sandbox Code Playgroud)
我真的必须创建到同一数据库的多个连接?
我在Debian Lenny(5.0.7)上成功使用pyodbc时遇到了一些麻烦.具体来说,我似乎无法获取NVARCHAR值(不是SQL Server专家,所以对我很容易:)).
大多数传统查询都可以.例如,table1中的行数产生
cursor.execute("SELECT count(id) from table1")
<pyodbc.Cursor object at 0xb7b9b170>
>>> cursor.fetchall()
[(27, )]
Run Code Online (Sandbox Code Playgroud)
就像完全转储ID一样
>>> cursor.execute("SELECT id FROM table1")
<pyodbc.Cursor object at 0xb7b9b170>
>>> cursor.fetchall()
[(0.0, ), (3.0, ), (4.0, ), (5.0, ), (6.0, ), (7.0, ), (8.0, ), (11.0, ), (12.0, ), (18.0, ), (19.0, ), (20.0, ), (21.0, ), (22.0, ), (23.0, ), (24.0, ), (25.0, ), (26.0, ), (27.0, ), (28.0, ), (29.0, ), (32.0, ), (33.0, ), (34.0, ), (35.0, ), (36.0, ), …Run Code Online (Sandbox Code Playgroud) 将OS X上运行的Python与基于云的SQL Server数据库连接的好方法是什么?
编辑:
使用pyodbc我收到此错误:
>>> import pyodbc
>>> cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=adsf.com;DATABASE=asdf;UID=asdf;PWD=asdf')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('00000', '[00000] [iODBC][Driver Manager]dlopen({SQL Server}, 6): image not found (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud) 在python脚本中,我需要在一个数据源上运行查询,并将该查询中的每一行插入到不同数据源的表中.我通常使用带有tsql链接服务器连接的单个insert/select语句来执行此操作,但是我没有与此特定数据源的链接服务器连接.
我找不到一个简单的pyodbc示例.这是我怎么做的,但我猜测在循环中执行一个插入语句非常慢.
result = ds1Cursor.execute(selectSql)
for row in result:
insertSql = "insert into TableName (Col1, Col2, Col3) values (?, ?, ?)"
ds2Cursor.execute(insertSql, row[0], row[1], row[2])
ds2Cursor.commit()
Run Code Online (Sandbox Code Playgroud)
使用pyodbc插入记录有更好的批量方式吗?或者这是一种相对有效的方法来做到这一点.我正在使用SqlServer 2012,以及最新的pyodbc和python版本.
我正在尝试使用OUTPUT. 但是,我遇到了 HY010 错误。以下查询/代码是我使用的:
string = """
SET NOCOUNT ON;
DECLARE @NEWID TABLE(ID INT);
INSERT INTO dbo.t1 (Username, Age)
OUTPUT inserted.id INTO @NEWID(ID)
VALUES(?, ?)
SELECT ID FROM @NEWID
"""
cursor.execute(string, "John Doe", 35)
cursor.commit()
id = cursor.fetchone()[0]
Run Code Online (Sandbox Code Playgroud)
最后一行id = cursor.fetchone()[0]导致 HY010 错误(见下文)。任何建议将不胜感激!
pyodbc.Error: ('HY010', '[HY010] [Microsoft][ODBC SQL Server Driver]Function sequence error (0) (SQLFetch)')
Run Code Online (Sandbox Code Playgroud)