【问题标题】:How can I use the pyodbc library in python to successfully upload an Attachment(s) to my Access Database?如何使用 python 中的 pyodbc 库将附件成功上传到我的 Access 数据库?
【发布时间】:2017-08-24 14:08:11
【问题描述】:

所以我在 python 中使用 pyodbc 库来访问我的 Microsoft Access 数据库,并且只是尝试在我创建的字段中插入数据,其中一个字段是附件类型列。因此,我试图找到一种通过 python 将附件插入我的 accdb 的方法。

这是我的代码,我已成功连接到我的数据库。 这就是我用来尝试插入文本和附件的方法;我把它作为一个用分号分隔的组合字符串,因为如果我选择并打印附件列中的值,我会得到输出: My Code for setting up a connection, getting the info from a database if it exists, and trying to insert both textual data and attachment data to a database

但是,运行后,我收到此错误并且没有填充任何字段:Error generated for Insert

所以我的问题是:如何使用 python 中的 pyodbc 库将附件成功上传到我的 Access 数据库?

【问题讨论】:

    标签: python ms-access pyodbc


    【解决方案1】:

    如何使用 python 中的 pyodbc 库将附件成功上传到我的 Access 数据库?

    你不能。 Access ODBC 驱动程序不支持将文件插入附件字段。因此,您不能使用 pyodbc 来执行此操作。

    我试图找到一种通过 python 将附件插入我的 accdb 的方法。

    可以使用 Python 将文件插入附件字段,但您需要使用 Access DAO 来执行此操作。您可以将win32com 与“标准”Python 一起使用(我从未尝试过),或者您可以使用IronPython 并通过.NET Framework 操作Access DAO。

    IronPython 示例:

    # Example table: [MyTable]
    # 
    # ID - AutoNumber, Primary Key
    # AttachedFiles - Attachment
    # 
    # 
    # Add an attachment to an existing row where ID=1
    
    import System
    t = System.Type.GetTypeFromProgID("DAO.DBEngine.120")
    dbe = System.Activator.CreateInstance(t)
    db = dbe.OpenDatabase(r"C:\Users\Public\Database1.accdb")
    rs_main = db.OpenRecordset("SELECT AttachedFiles FROM MyTable WHERE ID=1", 2)  # dbOpenDynaset
    rs_main.Edit()
    rs_attach = rs_main.Fields["AttachedFiles"].Value
    rs_attach.AddNew()
    fld = rs_attach.Fields["FileData"]  # "magic" field name for Attachments
    fld.LoadFromFile(r"C:\Users\Gord\Desktop\sample.pdf")
    rs_attach.Update()
    rs_attach.Close()
    rs_main.Update()
    rs_main.Close()
    db.Close()
    

    【讨论】:

    • 顺便说一句,我做了一个更新,我按照你说的做了,并且能够使用你提供的示例使用 win32com 来完成这项工作,非常感谢你的帮助。从字面上看,我的代码和你的代码之间的唯一区别是 win32com 模块的使用和一些功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多