如果有人问这个问题,我提前道歉,尽管我发现了类似的问题,但我找不到正确的答案。
我正在尝试通过使用可信连接的 IP/端口来连接到 SQL Server 2008 DB。
另外一点复杂性是:数据库位于美国境外,通常我们通过 Citrix 登录。登录 Citrix 后,它使用我们的 Windows 凭据(不确定这是否会影响问题)。
我尝试了几种不同类型的连接字符串
驱动程序=SQL Server
驱动程序=SQL Native Client
驱动程序=SQL Server Native Client 10.0
我还尝试了不同的格式,包括端口,以及在使用 IP 路由时扰乱网络库。
我希望有人能帮助我理解两件事。
1)(最重要的是)我如何弄清楚如何正确连接而无需简单的尝试和错误。我尝试检查connectionstrings.com,但这并没有多大帮助。我在网上找不到任何东西。
2)如果有人可以帮我解决连接字符串问题。
这是我正在做的一个例子:
cn = pyodbc.connect(r'DRIVER={SQL Native Client};Server=1.1.3.4,1234;Network Library=DBMSSOCN;Initial Catalog=Test;UID=DOM\me;Pwd=pass')
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助/指导。
获得 64 位新计算机后,当我运行在 32 位计算机上连接正常的 Python 脚本时,出现以下错误。我正在尝试连接到 Access 数据库。我正在使用 64 位版本的 python 和 pyodbc
错误消息:pyodbc.Error:('IM002','[IMO] [Microsoft] [ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序
我正在使用的连接代码在 32 位 PC 上运行良好:
cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=managermeta.mdb; Provider=MSDASQL;')
Run Code Online (Sandbox Code Playgroud) 如果有人能指出我正确的方向,我会很感兴趣。
我有一个很长的存储过程(其中还包含对其中其他存储过程的调用),用于更新各种表。
如果我在管理工作室中运行存储过程,它运行良好。如果我从 pyodbc 调用它,那么:
我一直运行 pyodbc 来执行存储过程,并且没有任何问题 - 我知道我的连接或调用没有任何问题,就好像我将较短的存储过程替换到 python 代码中它工作正常的位置一样。
存储过程确实生成了一些“警告:空值被聚合或其他 SET 操作消除”消息,我认为这些可能会导致问题,但每当我尝试 SET ANSI_WARNINGS { ON | OFF } 无论是在存储过程内部还是在存储过程外部,我得到了 pyodbc.ProgrammingError
对问题有任何猜测吗?
Python 3.4 (have the same problem in 2.7), MSSQL, Windows 7
Run Code Online (Sandbox Code Playgroud)
更新:
import pyodbc as p
def getconn():
server='insertsqlservername'
dbase='insertdbasename'
connStr=('Driver={SQL Server};SERVER=' +
server + ';DATABASE=' + dbase + ';' +
'trusted=1')
conn = p.connect(connStr)
return conn
def runSQL():
conn=getconn()
cursor=conn.cursor()
try:
cursor.execute('exec InsertStoredProcName')
conn.commit()
except:
print('sys.exc_info()[0])
cursor.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)
为了 100% 解决问题,似乎有两个组成部分: …
我正在尝试使用 pyodbc 获取 SQL Server 存储过程的输出参数。该过程位于 SQL Server 中,我可以从我的程序中成功插入数据。这是 SP 的一部分:
INSERT INTO Table(a,b,c,d,e,f,g)
VALUES (@a,@b,@c,@d,@e,@f,@g);
SET @Result = 'Inserted'
RETURN @Result
Run Code Online (Sandbox Code Playgroud)
当我尝试读取代码中的结果变量时,它显示为空。
尝试运行我的程序时,它失败并显示错误,
ImportError: dlopen(/Users/me/some/directory/to/project/lib/python3.6/site-packages/pyodbc.cpython-36m-darwin.so,
2): Library not loaded: /usr/local/opt/unixodbc/lib/libodbc.2.dylib
Referenced from: /Users/me/some/directory/to/project/lib/python3.6/site-packages/pyodbc.cpython-36m-darwin.so
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
我试过在 SO 上找到一些解决方案,但找不到太多。我使用的是 Mac OS (Sierra v10.12.6)。pip freeze产生,
(testing_environment) AAAAAA0035:directory me$ pip freeze
click==6.7
Flask==1.0.2
Flask-SQLAlchemy==2.3.2
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
pyodbc==4.0.23
SQLAlchemy==1.2.10
Werkzeug==0.14.1
xlrd==1.1.0
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。不确定发生了什么.. 运行 Windows 的同事没有遇到这个问题
我有一个 pydodbc 游标连接到 Azure SQL 数据库,其中安装了最新版本的 FreeTDS,在 Mac OS Sierra 10.12.6 上运行:
cursor.execute("CREATE TABLE test(a INT, b INT)")
cursor.commit()
Run Code Online (Sandbox Code Playgroud)
这行得通,那我试试
cursor.fast_executemany=True
cursor.execute("INSERT INTO test(a, b) VALUES(?,?)", [(1,2),(3,4),(5,6)])
Run Code Online (Sandbox Code Playgroud)
这导致分段错误,我看到的唯一错误消息是 segmentation fault: 11
如果我没有设置cursor.fast_executemany=True,那么代码工作得很好。
请有人告诉我应该如何插入数据库但是python中的所有数据框?
我找到了这个,但不知道如何插入所有名为 test_data 的数据框,其中包含两个数字:ID、Employee_id。
我也不知道如何为 ID 插入下一个值(类似于 nextval)
谢谢
import pyodbc
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Users\test_database.mdb;')
cursor = conn.cursor()
cursor.execute('''
INSERT INTO employee_table (ID, employee_id)
VALUES(?????????)
''')
conn.commit()
Run Code Online (Sandbox Code Playgroud) 我尝试参数化从表中获取的顶行数。
我试过了
db.cursor.execute(
'''
SELECT TOP ? VALUE FROM mytable
WHERE param = ?
''',
top_value, param
)
Run Code Online (Sandbox Code Playgroud)
它显示
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'@P1' 附近的语法不正确。(102) (SQLExecDirectW)")
像下面这样的字符串插值可以工作。
db.cursor.execute(
f'''
SELECT TOP {top_limit} VALUE FROM mytable
WHERE SITE_SK_FK = ?
''',
param
)
Run Code Online (Sandbox Code Playgroud)
我需要将它作为参数传递,还是字符串插值就足够了?
我正在尝试使用 pyodbc python 库从 Databricks 笔记本连接到 Azure SQL 数据仓库。当我执行代码时,我收到此错误:
Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found (0) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)
我知道我需要安装这个驱动程序,但我不知道如何去做。我有一个运行 Runetime 6.4 Standard_DS3_v2 的 Databricks 集群。
我正在尝试从 Netezza 数据库访问 python 代码中的 unicode(中文、日语等)字符。对于连接,我使用了 Netezza odbc 驱动程序和 sqlalechmy,以及 netezza 中的一个表,其中有一个 nvarchar 类型的列,其中包含中文字符。使用 python 代码访问该汉字时,输出为 ?? 而不是实际数据。
表有两列,一列是数据类型 id,另一列是数据类型 nvarchar:
id(int) Data(nvarchar)
1 ??
2 ??
3 ??
Run Code Online (Sandbox Code Playgroud)
连接代码:
id(int) Data(nvarchar)
1 ??
2 ??
3 ??
Run Code Online (Sandbox Code Playgroud) pyodbc ×10
python ×8
sql-server ×2
databricks ×1
freetds ×1
insert ×1
ms-access ×1
netezza ×1
pandas ×1
python-2.7 ×1
python-3.x ×1
sqlalchemy ×1
t-sql ×1