标签: pyodbc

Python/PyODBC 通过 IP 与可信连接连接到 SQL Server 2008 DB

如果有人问这个问题,我提前道歉,尽管我发现了类似的问题,但我找不到正确的答案。

我正在尝试通过使用可信连接的 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)

非常感谢任何帮助/指导。

python pyodbc sql-server-2008

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

64位PC上找不到数据源名称或没有默认驱动程序的pyodbc错误

获得 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 python-2.7

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

pyodbc 失败且没有错误

如果有人能指出我正确的方向,我会很感兴趣。

我有一个很长的存储过程(其中还包含对其中其他存储过程的调用),用于更新各种表。

如果我在管理工作室中运行存储过程,它运行良好。如果我从 pyodbc 调用它,那么:

  1. 它运行的时间与通常相同
  2. 我没有收到任何错误
  3. 没有一个要更新的表得到更新

我一直运行 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% 解决问题,似乎有两个组成部分: …

python sql-server pyodbc

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

Pyodbc - 读取存储过程的输出参数(SQL Server)

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

当我尝试读取代码中的结果变量时,它显示为空。

python sql-server pyodbc

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

将 pyodbc 导入程序时遇到问题

尝试运行我的程序时,它失败并显示错误,

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 的同事没有遇到这个问题

python pyodbc

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

为什么使用 fast_executemany=True 调用 cursor.executemany() 会导致分段错误?

我有一个 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 pyodbc freetds segmentation-fault

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

从 Pandas DataFrame 插入 Access 数据库

请有人告诉我应该如何插入数据库但是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)

python ms-access insert pyodbc pandas

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

在 tsql 和 pyodbc 中参数化 TOP 值

我尝试参数化从表中获取的顶行数。

我试过了

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)

我需要将它作为参数传递,还是字符串插值就足够了?

python t-sql pyodbc

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

您知道如何在 Databricks 集群上安装“ODBC Driver 17 for SQL Server”吗?

我正在尝试使用 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 集群。

pyodbc python-3.x databricks azure-sql-data-warehouse

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

得到??将 Netezza 与 Python 连接时作为 unicode 字符的输出

我正在尝试从 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)

python sqlalchemy pyodbc netezza python-unicode

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