debian下python3读取MDB数据库

本文发布时间: 2019-Mar-22
linux平台上可以使用unixodbc和libmdbodbc1读取mdbunixODBC是unix like平台上ODBC规范的开源实现,而libmdbodbc1则是mdbtools提供的mdb数据库的odbc驱动。如果不通过编程方式,只是单纯查看mdb,可以Debian查看Acess MDB数据库文件安装unixODBC和libmdbodbc1#apt-get install unixodbc libmdbodbc1配置odbc/etc/odbcinst.ini配置odbc驱动[MDBTools] Description=MDBTools Driver Driver=libmdbodbc.so.1 Setup=libmdbodbc.so.1 FileUsage=1 UsageCount=1/etc/odbc.ini配置数据源[test] Driver = MDBTools Database = /path/to/mdb/file/test.mdb也可以在在程序中动态设置数据源python3访问mdbpython3使用pypyodbc或者pyodbc可以访问odbc数据库pypyodbc先看pypyodbc,这是个python实现的odbc访问模块# python3 setup.py>>> import pypyodbc>>> conn=pypyodbc.connect('Driver=MDBTools;DBQ=/path/to/Record.mdb')>>> print(conn.cursor().execute('SELECT * FROM Build').fetchone()[0])Traceback (most recent call last):File "", line 1, in File "/usr/local/lib/python3.3/dist-packages/pypyodbc.py", line 1805, in fetchonevalue_list.append(buf_cvt_func(alloc_buffer.value))ValueError: invalid literal for int() with base 10: b'\xe0'mdb文件中中文字符编码为GB码,出现问题,pypyodbc直接崩溃了。pyodbcpyodbc是C实现的odbc访问模块# apt-get install python3-dev mdbtools-dev# python3 setup.py build install>>> import pyodbc>>> conn=pyodbc.connect('Driver=MDBTools;DBQ=/path/to/Record.mdb')>>> s1=conn.cursor().execute('SELECT * FROM Build').fetchone()[0]>>> s1'냥\ue59a\ua7ba鯥\ue9bd薙'这次pyodbc没有崩溃,但是输出了乱码。不知是libmdbodbc1还是pyodbc的问题,总之是没有正确的识别GB码,有时间再翻源代码看。其他方式访问mdbisqlmdbtools自带的isql可以查看mdb,但不能使用动态数据源,只能使用/etc/odbc.ini文件里配置好的数据源,比如这样$ isql testmdb-export导出表到csv文件$ mdb-export /path/to/foo.mdb table >> table.csvmdb-export导出的csv编码是正确的,没有出现乱码。然后可以用pyhton3来处理csv文件。mdb-sqlie转换mdb到sqlite格式还可以使用mdb-sqlite将mdb数据库转换到sqlite数据库,然后再用python3访问sqlite数据库,这个没有测试。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表