问题标签 [pyodbc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1561 浏览

python - 如何让 pyodbc.connect 提示?

在我的 C++ 程序中,我习惯于提示输入密码丢失或让您选择自己的连接的连接过程。当我使用 pyodbc.connect() 时,会生成一个异常。

连接字符串的 pyodbc 文档指出 pyodbc 调用 C 函数SQLDriverConnect。提示行为由 DriverCompletion 参数控制,我看不到从 Python 设置该参数的方法。

0 投票
3 回答
7728 浏览

python - 使用pyodbc进行Python多处理和数据库访问“不安全”?

问题:

我收到以下回溯,但不明白它的含义或如何解决它:

情况:

我有一个充满待处理数据的 SQL Server 数据库。我正在尝试使用多处理模块来并行化工作并利用我计算机上的多个内核。我的一般班级结构如下:

  • 我的管理器类
    • 这是程序开始的主类。
    • 它创建了两个 multiprocessing.Queue 对象,一个work_queue和一个write_queue
    • 它还创建并启动其他进程,然后等待它们完成。
    • 注意:这不是multiprocessing.managers.BaseManager() 的扩展
  • 我的读者类
    • 此类从 SQL Server 数据库中读取数据。
    • 它将项目放在work_queue.
  • 我的工人阶级
    • 这是工作处理发生的地方。
    • 它从 中获取项目work_queue并将完成的项目放入write_queue.
  • 我的作家类
    • 该类负责将处理后的数据写回 SQL Server 数据库。
    • 它从write_queue.

这个想法是,将有一名经理、一名读者、一名作家和许多工人。

其他详情:

我在stderr中得到了两次回溯,所以我认为它发生在读者和作者一次。我的工作进程创建得很好,但只是坐在那里,直到我发送一个 KeyboardInterrupt,因为它们在work_queue.

读取器和写入器都有自己的数据库连接,在初始化时创建。

解决方案:

感谢 Mark 和 Ferdinand Beyer 的回答和问题导致了这个解决方案。他们正确地指出 Cursor 对象不是“pickle-able”,这是多处理用于在进程之间传递信息的方法。

我的代码的问题是,MyReaderClass(multiprocessing.Process)两者都以他们的方法MyWriterClass(multiprocessing.Process)连接到数据库。__init__()我在 中创建了这两个对象(即称为它们的 init 方法)MyManagerClass,然后调用了start().

所以它会创建连接和游标对象,然后尝试通过pickle将它们发送到子进程。我的解决方案是将连接和游标对象的实例化移动到 run() 方法,直到子进程完全创建后才会调用该方法。

0 投票
2 回答
926 浏览

ms-access - 通过 odbc 连接到 MS Access 避免 MaxLocksPerFile

由于“我无法控制的情况” tm,我正在使用带有 MS Access 后端的 sqlalchemy。我遇到以下代码的问题:

引发“超出文件共享锁定计数”。大表错误。生成的语句只是:

带有 uid 的参数。然后通过 pyodbc 执行该语句。MSDN 提供了一些解决该问题的建议,然后通知我如果数据库位于 Novell NetWare 服务器上,它们将无法工作,它就是。

是否有我可以使用的已知工作(最好在 sqlalchemy 层),或者我是否需要创建一些丑陋的 hack,一次选择前 9,000 条记录以删除并循环直到完成?

0 投票
1 回答
1178 浏览

python - 通过 PYODBC 的 SQL 查询在一台机器上静默失败,在另一台机器上运行

我正在开发一个程序来自动解析 XML 文件中的数据并将其存储到多个数据库中。(特别是 USGS 实时水质服务,如果有人感兴趣,请访问http://waterservices.usgs.gov/rest/WaterML-Interim-REST-Service.html)它是使用 LXML 和 PYODBC 用 Python 2.5.1 编写的。数据库位于 Microsoft Access 2000 中。

连接函数如下:
def get_AccessConnection(db):
connString = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + db
cnxn = pyodbc.connect(connString, autocommit=False)
cursor = cnxn。 cursor()
返回 cnxn, cursor
其中 db 是数据库的文件路径。

该程序:
a) 打开与数据库的连接
b) 为该数据库解析 2 到 8 个 XML 文件,并将其中的值构建为一系列记录以插入数据库(使用嵌套字典结构,而不是用户定义的type)
c) 遍历一系列记录,cursor.execute() - 为每个记录执行一个 SQL 查询
d) 提交并关闭数据库连接

如果 cursor.execute() 调用抛出错误,它会将回溯和查询写入日志文件并继续。

当我的同事在他的机器上运行它时,对于一个特定的数据库,特定的记录根本不存在,也没有记录错误。当我从我的机器通过完全相同的网络路径在完全相同的数据库副本上运行完全相同的代码时,应该存在的所有数据都在那里。

我和我的同事都在装有 Microsoft Access 2000 和相同版本的 Python、lxml 和 pyodbc 的 Windows XP 计算机上。我不知道如何检查我们是否拥有相同版本的 Microsoft ODBC 驱动程序。我无法找到存在的记录和不存在的记录之间的任何区别。我正在测试其他数据库是否会发生同样的问题,以及是否也发生在第三位同事的计算机上。

我真正想知道的是任何人能想到的任何事情都会导致这种情况,因为这对我来说没有意义。总结一下:执行 SQL 查询的 Python 代码将在一台计算机上静默失败一半,而在另一台计算机上完美运行。

编辑:
没有更多的问题。我只是让我的同事再次运行它,并且数据库已完全更新,没有丢失记录。仍然不知道为什么它首先失败了,也不知道它是否会再次发生,但“问题解决了”。

0 投票
1 回答
2713 浏览

sql - Using pyodbc to insert rows into a MS Access MDB, how do I escape the parameters?

I'm using pyodbc to talk to a legacy Access 2000 .mdb file.

I've got a cursor, and am trying to execute this:

However, doing so results in

I understand I can simply change the question marks to the literal values, but in my experience proper escaping of strings across databases is... not pretty.

PHP and mysql team up to bring mysql_real_escape_string and friends, but I can't seem to find pyodbc's function for escaping values.

If you could let me know what the recommended way of inserting this data (from python) is, that'd be very helpful. Alternatively, if you have a python function to escape the odbc strings, that would also be great.

0 投票
3 回答
1982 浏览

jdbc - 将 ODBC 应用程序与 JDBC 驱动程序一起使用

我的公司使用Vertica。我们有使用 pyodbc 连接到它的 Python 应用程序。我的大部分开发工作都是在 Mac(Snow Leopard)上完成的,不幸的是 Vertica 还没有发布适用于 Mac 的 ODBC 驱动程序。他们确实有 JDBC 驱动程序。我不认为在 Jython 中进行开发是一个好的折衷方案。有什么方法可以将 JDBC 驱动程序与 ODBC 应用程序一起使用?某种 ODBC 连接器?

0 投票
2 回答
2925 浏览

sql-server - linux上的Django-pyodbc SQL Server/freetds服务器连接问题

错误: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnectW)')

我正在从 Windows 开发机器上的开发迁移到生产中的 Linux 机器,并且我遇到了 freetds 驱动程序的问题。据我所知,错误消息意味着它找不到驱动程序。我可以通过 cli 通过 sqsh 和 tsql 进行连接。我已经设置了我的 settings.py 。

有人对 django 有任何 SQL Server 经验吗?我必须使用dns吗?(我将如何格式化?)

0 投票
1 回答
7340 浏览

python - SQL Server 上的 pyodbc - 如何进行插入并取回行 ID?

我将 pyodbc 与 SQL Server 2000 一起使用。

我希望能够插入一行并取回自动递增的行 ID 值?有任何想法吗?

这是我到目前为止所拥有的:

0 投票
3 回答
4563 浏览

python - Python - Linux - 使用 Windows 凭据连接到 MS SQL - FreeTDS+UnixODBC + pyodbc 或 pymssql

似乎没有任何很好的设置说明。有没有人有什么好的指示?我是一个 linux 菜鸟,所以要温柔。我确实看到了另一篇类似的帖子,但没有真正的答案。

我有几个问题。

  1. FreeTDS“似乎”没有工作。我正在尝试连接,并使用“tsql”命令收到以下消息:“默认数据库被设置为 databaseName 连接到服务器时出现问题”,但没有提及问题所在。

    1. 尝试使用 pyodbc 连接时出现的错误是:“pyodbc.Error: ('08S01', '[08S01] [unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server 不可用或不存在 ( 20009) (SQLDriverConnectW)')"

    2. 我尝试使用 pymssql 进行类似的操作,但遇到了类似的问题。我不断收到无法连接的错误,但它没有告诉我原因。

0 投票
2 回答
1664 浏览

python - 如何使用 pyodbc 对 Unicode 字符串进行编码以保存到 SAS 数据集?

我正在使用 Python 读取和写入 SAS 数据集,使用pyodbcSAS ODBC 驱动程序。我可以很好地加载数据,但是当我保存数据时,使用类似:

...我得到一个pyodbc.Error: ('HY004', '[HY004] [Microsoft][ODBC Driver Manager] SQL data type out of range (0) (SQLBindParameter)')错误。

问题似乎是我正在传递一个 unicode 字符串;我需要做什么来处理这个?