问题标签 [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 投票
3 回答
2553 浏览

python - 使用备用 unixODBC 安装

我在一个将 unixODBC 安装在组织范围的集中安装驱动器上的环境中工作,但我们(实际开发人员)不允许在其中安装驱动程序或数据源。这一切都是倒退的,但我必须忍受它。

现在我正在尝试构建一个从这个 unix enviro 连接到 mssql 2005 服务器的 python 应用程序,所以我显然需要一些 sql 驱动程序!

我通过在我可以完全控制的驱动器的一部分上重新安装 unixODBC 来避免无法访问预安装的 unixODBC。我已经安装了 freeTDS 并配置了所有内容,以便我可以使用 isql 成功连接到服务器——太棒了!

现在唯一的问题是,当我在我的 python 程序(使用 pyodbc)中执行一行时,例如:

我明白了

我认为这是因为 pyodbc 仍在寻找原始的 unixODBC 安装,而不是我的本地安装。所以我想知道:

如何配置我的脚本以查找我的本地 unixODBC 安装,而不是安装在主驱动器上的那个

0 投票
2 回答
945 浏览

python - 使用 PYODBC 在 MSSQL 中将 BitTorrent 位域插入 VarBinary(MAX)

我正在从事一个涉及 BitTorrent 的项目,我在其中收到一个位域作为 python 字符串。例如:

位域=“000001110100111000110101100010”

我希望能够将 python 字符串转换为一种格式,以便可以使用 PYODBC 将其按原样插入到 MSSQL 数据库的 varbinary(max) 列中。如果我尝试将它作为字符串插入,它当然会抱怨非法转换错误。

注意 PYODBC,根据他们的文档,需要一个字节数组或缓冲区作为 varbinary 字段的输入。

任何建议,将不胜感激。

0 投票
0 回答
2133 浏览

python - 在 Ubuntu 11.10 上使用 python 和 unixODBC 读取 MS Access JET 4 数据库 (.mdb):获取错误值

我在尝试在 Ubuntu 11.10 32 位上使用 Python 2.7.2(unixODBC 2.2.14、pyodbc 2.1.11 和 mdbtools 驱动程序)读取 Microsoft Access 数据库(JET 4 .mdb)时遇到了一些问题。是的,我知道这是一个可怕的想法,但奇怪的是,这是我能找到的最简单的解决方案。由于各种原因,我想避免将 .mdb 数据库转换为另一种格式(如 sqlite),但如果我无法弄清楚这似乎是唯一的解决方案。对于这个问题的长度,我深表歉意,而且我对 linux 和 odbc/数据库处理也很陌生。我花了 3 天时间试图解决这个问题,但最后两天却一无所获。

问题:我可以读取数据库,但值未正确编码/格式。

Python代码:

输出:

行:

应该:

我认为并且一直在努力弄清楚的是,在读取列信息(SQLDescribeCol.c)和/或获取数据(SQLFetch.c 和 SQLGetData.c)时出现错误。

以第 1 列和第 2 列为例。第 1 列是时间戳,并正确标识为时间戳 (SQL_TYPE_TIMESTAMP)。它还将正确的值读入缓冲区(Buffer = [03/14/03 15:40:00]),但似乎被 Column Size/StrLen 或 Ind 缩短为 8,因为结果输出为 8 个字符长 '03 /14/03',虽然我认为大小 8 指的是字节(?)。

第 2 列是整数值 1,但在 Buffer 中读取为 49。我还没有弄清楚为什么,但它将所有整数值读取为 ascii 代码/数字字符(1 变为 49,2 变为 50 等),这相当不方便当数字变大时(例如1728变成942815025),我不知道如何处理。双数在缓冲区中也被错误地读取。

SQLDescribeCol 来自日志,第 1 列和第 2 列(与下面链接的完整日志文件相同):

来自日志列 1 和 2 的 SQLGetData:

这些是 mdbtools 给出的表 abd 的列:

完整的 ODBC 日志文件: http: //pastebin.com/Q01ahwCW

如果有人对如何解决这个问题有任何提示(包括简单的数据库转换,因为我必须经常转换),将不胜感激!如果需要更多信息,我可以提供!

谢谢!

0 投票
1 回答
1334 浏览

python - 使用pyodbc将数据从excel导入python中的postgres

正在使用. _ _ python(2.6)_pyodbc

面临的问题是:

left single quotation mark(ANSI hex code : 0x91)excel 源代码中有 , 等字符。现在,当它使用 pyodbc 导入 PostgreSQL 时,它会终止并给出错误DatabaseError: invalid byte sequence for encoding "UTF8": 0x91

我尝试了什么:decode('unicode_escape')暂时使用了。但是,这不能完成,因为这只是删除/转义了相关字符。

替代试验:最初解码,Unicode 无处不在,然后在需要时从数据库中编码。由于手头的项目范围很广,这也无法做到。

请建议我一些方法/程序/内置函数来完成任务。

0 投票
1 回答
967 浏览

python - 如何使用 pyodbc 执行“GRANT SELECT ON”语句

我正在使用数百个 msaccess 数据库。我正在尝试构建数据库、表和其他对象的摘要。为了找出给定数据库中的所有表和对象,我使用查询

但是,我收到 pyodbc 错误消息

如何以编程方式更改所有 msaccess 数据库的权限。我尝试使用“GRANT SELECT ON”语句,但收到错误消息

我使用的连接字符串是这种形式

非常感谢您的帮助。

0 投票
2 回答
3048 浏览

sqlalchemy - sqlalchemy 使用 tg2 和 pyodbc 引发 DataError 22001 写入 SQL Server 2005

我在 SQL Server 表中使用了反射的 sqlalchemy 映射类。我的活动类(映射类)的 DBSession.add() 实例包含从不同来源获得的数据。然后我调用了 transaction.commit()(因为我是从 tg2 调用的,所以我不能使用 session.commit())

错误回溯:

很高兴得到任何帮助,因为我不知道如何从这里继续/调试

编辑:我怀疑这与 unicode 有关,所以我将 sqlalchemy 列更改为 unicode。

也许 DataError 以某种方式卡住了,我需要调用回滚,但我不知道在 tg2 的事务中调用回滚是热的

编辑:mssql 中的 EVENTCODE 列是:datatype:PK,nvarchar(6),不为空希望这有帮助

另一个编辑:插入代码(相关部分)

0 投票
4 回答
345 浏览

python - 如何解决以下结果?

我已经编写了从 SQL 中进行选择并返回值的脚本,并且该脚本使用“code = code + 1”方法来制作选择的条件。

但有时条件不存在,我该如何处理?

这里是实际的脚本部分:

但是当没有返回值时,会打印以下错误

TypeError:“NoneType”对象不可下标

0 投票
1 回答
1569 浏览

python - 使用 cursor.execute select 命令在 pyodbc 中返回日期

我正在尝试使用 pyodbc 从 Oracle 数据库中返回符合某些条件的日期。例如,我想获取 2010 年 1 月 1 日到 2011 年 1 月 1 日之间的所有日期。为此,我这样做:

x = cursor.execute("""select Column from Table where OutputDate > '2010/01/01' and OutputDate < '2011/01/01'"""

当我使用 Access 数据库时,类似的东西起作用了,但现在它给了我这个错误:

pyodbc.DataError: ('22007', '[22007] [Microsoft][ODBC driver for Oracle][Oracle]ORA-01861: literal does not match format string (1861) (SQLExecDirectW)')

我在 Windows 7 上,我使用的驱动程序是 Microsoft ODBC for Oracle(我猜这从错误中很明显)

“文字与格式字符串不匹配”是否意味着我不能在此数据库上使用 < 和 > 日期?有人可以帮我吗?

非常感谢,亚历克斯

0 投票
3 回答
4983 浏览

sql-server-2008 - Debian Linux 上的 pyodbc/FreeTDS/unixODBC:TDS 版本的问题

我在 Debian Lenny (5.0.7) 上成功使用 pyodbc 时遇到了一些麻烦。具体来说,我似乎无法获取 NVARCHAR 值(不是 SQL Server 专家,所以请放轻松:))。

大多数传统查询都可以正常工作。例如, table1 中的行数产生

和完整的 id 转储一样

但是名称转储(同样,NVARCHAR 类型)不会

...关键错误是

pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server] Unicode 唯一排序规则中的 Unicode 数据或 ntext 数据无法使用 DB-Library(如 ISQL)或 ODBC 版本 3.7 或更早。(4004)(SQLExecDirectW)')

这在表中是一致的。

我已经尝试了各种不同的版本,但现在我正在运行 unixODBC 2.2.11(来自 lenny repos)、FreeTDS 0.91(从源代码构建,带有./configure --enable-msdblib --with-tdsver=8.0)和 pyodbc 3.0.3(从源代码构建)。

使用类似的组合(unixODBC 2.3.0、FreeTDS 0.91、pyodbc 3.0.3),相同的代码可以在 Mac OS X 10.7.2 上运行。

我搜索了高低,研究了此处此处提供的解决方案并重新编译了不同版本的 unixODBC 和 FreeTDS,但仍然没有骰子。相关配置文件如下:

任何建议或方向将不胜感激!

0 投票
2 回答
4194 浏览

python - 如何将 Python 2.6 连接到 OSI PI?

pyodbc用来管理我的数据库连接。我正在尝试连接到 OSI PI 数据库并收到此错误:

pyodbc.Error: ('IM002', "[IM002] [OSI][PI ODBC][PI]PI-API Error <pilg_getdefserverinfo> 0 (0) (SQLDriverConnectW); [01000] [Microsoft][ODBC Driver Manager] The driver doesn't support the version of ODBC behavior that the application requested (see SQLSetEnvAttr). (0)")

在与供应商交谈后,我得到了以下回复: Looks like pyodbc is written against ODBC 3.x. The OSI PI ODBC driver is using ODBC 2.0. The python ODBC driver manager will convert most ODBC 3 calls on the fly to ODBC 2 ones. Anything added to 3, however, will obviously fail. You would need to find some way to make sure that your only using 2.0 compliant ODBC calls. Currently their is not a PI ODBC driver that is compliant with ODBC 3.0.

我的代码相当简单,因为此时我只是尝试连接:

有没有人将 python 连接到 OSI PI?如果是这样,你是怎么做到的?如果不是,并且您仍然使用 OSI 数据库中的数据,您最终是如何访问它的?