问题标签 [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.
python - 使用备用 unixODBC 安装
我在一个将 unixODBC 安装在组织范围的集中安装驱动器上的环境中工作,但我们(实际开发人员)不允许在其中安装驱动程序或数据源。这一切都是倒退的,但我必须忍受它。
现在我正在尝试构建一个从这个 unix enviro 连接到 mssql 2005 服务器的 python 应用程序,所以我显然需要一些 sql 驱动程序!
我通过在我可以完全控制的驱动器的一部分上重新安装 unixODBC 来避免无法访问预安装的 unixODBC。我已经安装了 freeTDS 并配置了所有内容,以便我可以使用 isql 成功连接到服务器——太棒了!
现在唯一的问题是,当我在我的 python 程序(使用 pyodbc)中执行一行时,例如:
我明白了
我认为这是因为 pyodbc 仍在寻找原始的 unixODBC 安装,而不是我的本地安装。所以我想知道:
如何配置我的脚本以查找我的本地 unixODBC 安装,而不是安装在主驱动器上的那个
python - 使用 PYODBC 在 MSSQL 中将 BitTorrent 位域插入 VarBinary(MAX)
我正在从事一个涉及 BitTorrent 的项目,我在其中收到一个位域作为 python 字符串。例如:
位域=“000001110100111000110101100010”
我希望能够将 python 字符串转换为一种格式,以便可以使用 PYODBC 将其按原样插入到 MSSQL 数据库的 varbinary(max) 列中。如果我尝试将它作为字符串插入,它当然会抱怨非法转换错误。
注意 PYODBC,根据他们的文档,需要一个字节数组或缓冲区作为 varbinary 字段的输入。
任何建议,将不胜感激。
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
如果有人对如何解决这个问题有任何提示(包括简单的数据库转换,因为我必须经常转换),将不胜感激!如果需要更多信息,我可以提供!
谢谢!
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 无处不在,然后在需要时从数据库中编码。由于手头的项目范围很广,这也无法做到。
请建议我一些方法/程序/内置函数来完成任务。
python - 如何使用 pyodbc 执行“GRANT SELECT ON”语句
我正在使用数百个 msaccess 数据库。我正在尝试构建数据库、表和其他对象的摘要。为了找出给定数据库中的所有表和对象,我使用查询
但是,我收到 pyodbc 错误消息
如何以编程方式更改所有 msaccess 数据库的权限。我尝试使用“GRANT SELECT ON”语句,但收到错误消息
我使用的连接字符串是这种形式
非常感谢您的帮助。
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),不为空希望这有帮助
另一个编辑:插入代码(相关部分)
python - 如何解决以下结果?
我已经编写了从 SQL 中进行选择并返回值的脚本,并且该脚本使用“code = code + 1”方法来制作选择的条件。
但有时条件不存在,我该如何处理?
这里是实际的脚本部分:
但是当没有返回值时,会打印以下错误
TypeError:“NoneType”对象不可下标
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(我猜这从错误中很明显)
“文字与格式字符串不匹配”是否意味着我不能在此数据库上使用 < 和 > 日期?有人可以帮我吗?
非常感谢,亚历克斯
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,但仍然没有骰子。相关配置文件如下:
任何建议或方向将不胜感激!
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 数据库中的数据,您最终是如何访问它的?