首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用64位python和odbc驱动程序从32位.mdb中读取

如何使用64位python和odbc驱动程序从32位.mdb中读取
EN

Stack Overflow用户
提问于 2018-01-31 10:09:22
回答 1查看 2.3K关注 0票数 1

你好,再次社区,

我正在寻找32位..mdb与我的64位环境冲突的解决方案: 64位Windows 7,64位MS数据库驱动程序运行64位python。我希望将这些..mdb中的数据写入64位PostgreSQL数据库,并可能还将其写入.csv文件。然而,我希望这个工具不仅能在我的机器上工作,而且能在同事的机器上工作,这样它最好也能处理其他环境。

最初,我用32位版本的MS数据库驱动程序和python编写了一个.csv脚本。然而,我想要创建一个QGIS插件,这也是我在64位,我不想改变所有的32位,只是为了能够读取偶然的32位.mdb文件。

我对编码完全陌生,但我已经阅读了这个问题,并了解到在32位数据库与64位脚本和驱动程序之间建立直接连接基本上是不可能的。尽管如此,我仍然很难相信这个问题没有解决办法。网络应用程序不定期处理这种情况吗?例如,是否可以使用Django创建这种功能?还是使用一个昂贵的司机声称支持32位和64位都是一个解决方案?创建一个独立的工具会更容易吗?或者这样的工具已经存在了,只是我还没有找到呢?

因此,总结一下:我希望将数据从32位.mdb写入64位PostgreSQL数据库,最好是用QGIS编写。

我以前使用过的初始代码是:

代码语言:javascript
运行
复制
import csv, pyodbc
from tkinter import Tk
from tkinter.filedialog import askopenfilename

Tk().withdraw()
filename = askopenfilename()filenameEdit = filename.replace(":/", "://")

print(filename)
print(filenameEdit)

MDB = filename
DRV = '{Microsoft Access Driver (*.mdb, *.accdb)}'
DBQ = filename
PWD = 'pw'

con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()

SQL = 'SELECT * FROM strips'  # This query would need to be expanded
rows = cur.execute(SQL).fetchall()
cur.close()
con.close()

mytable = input("Save file as: ")

def writeCSV():
    with open((mytable+'.csv'), 'w') as newDB:
        csv_writer = csv.writer(newDB, lineterminator='\n')
        for row in rows:
            csv_writer.writerow(row)

writeCSV()

# Another function should be added to write to a PostreSQL database

这给现在运行64位的错误是:

代码语言:javascript
运行
复制
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))

pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63) (SQLDriverConnect); [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver] Cannot open a database created with a previous version of your application. (-1019); [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver] Cannot open a database created with a previous version of your application. (-1019)")`

任何想法都会非常感谢,非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-16 14:08:02

Access数据库文件( .mdb,.accdb)不是特定于体系结构的;没有“32位.mdb文件”或“64位.accdb文件”这样的东西。Access数据库引擎有32位版本和64位版本(以及驱动程序等)。但它们生成的数据库文件是相同的。

你收到的是

无法打开用应用程序的以前版本创建的数据库。

错误,因为Access数据库引擎的版本不再支持要使用的数据库文件的版本(而不是"bitness")。如果您正在为Access_2013或更高版本使用Access数据库引擎,那么您的文件格式必须为Access_97或更高版本。如果您使用的是来自Access_2010的Access数据库引擎,那么您尝试使用的文件的格式是超级旧的(可能是Access_2.0)。

正如您似乎已经注意到的那样,我们仍然可以使用Windows (Microsoft Access Driver (*.mdb))附带的遗留的"Jet“数据库引擎来处理旧的数据库文件,但是它是32位驱动程序,没有64位版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48539500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档