gpt4 book ai didi

javascript - 在 Wordpress 站点上显示来自 MSAccess DB 的自定义数据的最佳方式是什么?

转载 作者:行者123 更新时间:2023-12-02 23:37:35 25 4
gpt4 key购买 nike

我需要熟练的 WordPress 开发人员的建议。我的组织有内部 MS Access 数据库,其中包含大量表格、报告和输入表单。 DB的结构不太复杂(人员信息、事件、第三方信息以及它们之间的不同关系)。我们希望在我们的 WordPress 网站上显示此信息的一部分,该网站目前只有新闻部分。

由于我们数据库中的信息每天都会更新,因此我们也希望在 MS Access DB 和 Wordpress (MySQL DB) 之间进行简单的同步。现在我尝试找到连接 MS Access 和 Wordpress 的最佳方法。

目前我只看到以下这些方法:

  1. 提出导出请求并保存到 XML 文件。
  2. 导入到Wordpress的MySQL数据库。
  3. 使用自定义字段功能(或开发自己的插件)在 WordPress 网站上显示内容。

-或-

  • 在与 Wordpress 站点相同的域上的一些非常轻型的 PHP 引擎(例如 CodeIgniter)上构建自己的信息系统,该系统实际上会显示导入的内容。
  • 这些变体需要每天在数据库之间手动传输信息。我不知道 Wordpress 显示数据库中的自定义数据的可能性。您能建议我在我的情况下您更喜欢使用什么方法吗?

    附注使用的 MS Access 版本为 2007+(文件 .accdb)。字段名称、数据库和内容均采用俄语。将来我们计划添加 2 种新语言(英语、乌克兰语)。 MS access DB 还包含人物照片。

    ---更新信息---

    我能够使用以下技术进行半自动导入/导出操作:

    • Javascript 库 ACCESSdb(针对新的数据库格式进行了一些修改)
    • Internet Explorer 11(用于运行 ADODB ActiveX)
    • 用于从 MSAccess 表中提取附加文件的小型 VBS 脚本。
    • 最新的 jQuery
    • 用于自定义数据的 WordPress 插件(高级自定义字段、自定义帖子类型 UI)
    • 启用了 WordPress Rest-API(使用插件 JSON 基本身份验证、ACF 到 REST API)

    首先,我使用自定义帖子和自定义字段技术在 Wordpress 站点构建了数据方案。然后我在本地对 MSAccess DB 运行 JS 查询,收到我通过 jQuery 发送到 WP Rest-API 端点的信息。整个传输操作只需一键即可完成。但由于安全限制,我无法通过 JS 自动上传文件。只需点击每个文件 +1 次即可完成此操作。

    最佳答案

    你的问题太宽泛了。它由两部分组成:1. 从 Access 导出和 2. 导入到 Wordpress。由于我对Wordpress不熟悉,我只能给你1部分的建议。至少谷歌显示有一些插件可以从 CSV 导入,如下所示: https://ru.wordpress.org/plugins/wp-ultimate-csv-importer/

    您可以创建一个运行 Access 的计划任务,该任务运行运行 VBA 函数的宏,如下所述: Running Microsoft Access as a Scheduled Task

    在该 VBA 函数中,您可以使用 ADODB.Stream 对象使用您的数据创建一个 UTF-8 CSV 文件,并将其上传到您网站的 FTP。

    或者

    我个人使用 python 脚本来做类似的事情。我更喜欢这种方式,因为它更简单、更可靠。有我的代码。请注意,我有两个 FTP 服务器:其中之一仅用于测试。

    # -*- coding: utf-8 -*-
    # 2018-10-31
    # 2018-11-28

    import os
    import csv
    from time import sleep
    from ftplib import FTP_TLS
    from datetime import datetime as dt
    import msaccess

    FTP_REAL = {'FTP_SERVER':r'your.site.com',
    'FTP_USER':r'username',
    'FTP_PW':r'Pa$$word'
    }

    FTP_WIP = {'FTP_SERVER':r'192.168.0.1',
    'FTP_USER':r'just_test',
    'FTP_PW':r'just_test'
    }

    def ftp_upload(fullpath:str, ftp_folder:str, real:bool):
    ''' Upload file to FTP '''
    try:
    if real:
    ftp_set = FTP_REAL
    else:
    ftp_set = FTP_WIP
    with FTP_TLS(ftp_set['FTP_SERVER']) as ftp:
    ftp.login(user=ftp_set['FTP_USER'], passwd=ftp_set['FTP_PW'])
    ftp.prot_p()
    # Passive mode off otherwise there will be problem
    # with another upload attempt
    # my site doesn't allow active mode :(
    ftp.set_pasv(ftp_set['FTP_SERVER'].find('selcdn') > 0)
    ftp.cwd(ftp_folder)
    i = 0
    while i < 3:
    sleep(i * 5)
    i += 1
    try:
    with open(fullpath, 'br') as f:
    ftp.storbinary(cmd='STOR ' + os.path.basename(fullpath),
    fp=f)
    except OSError as e:
    if e.errno != 0:
    print(f'ftp.storbinary error:\n\t{repr(e)}')
    except Exception as e:
    print(f'ftp.storbinary exception:\n\t{repr(e)}')
    filename = os.path.basename(fullpath)
    # Check if uploaded file size matches local file:
    # IDK why but single ftp.size command sometimes returns None,
    # run this first:
    ftp.size(filename)
    #input(f'overwrite it: {filename}')
    ftp_size = ftp.size(os.path.basename(fullpath))
    # import pdb; pdb.set_trace()
    if ftp_size != None:
    if ftp_size == os.stat(fullpath).st_size:
    print(f'File \'{filename}\' successfully uploaded')
    break
    else:
    print('Transfer failed')
    # input('Press enter for another try...')
    except OSError as e:
    if e.errno != 0:
    return False, repr(e)
    except Exception as e:
    return False, repr(e)
    return True, None

    def make_file(content:str):
    ''' Make CSV file in temp directory and return True and fullpath '''
    fullpath = os.environ['tmp'] + f'\\{dt.now():%Y%m%d%H%M}.csv'
    try:
    with open(fullpath, 'wt', newline='', encoding='utf-8') as f:
    try:
    w = csv.writer(f, delimiter=';')
    w.writerows(content)
    except Exception as e:
    return False, f'csv.writer fail:\n{repr(e)}'
    except Exception as e:
    return False, repr(e)
    return True, fullpath

    def query_upload(sql:str, real:bool, ftp_folder:str, no_del:bool=False):
    ''' Run query and upload to FTP '''
    print(f'Real DB: {real}')
    status, data = msaccess.run_query(sql, real=real, headers=False)
    rec_num = len(data)
    if not status:
    print(f'run_query error:\n\t{data}')
    return False, data
    status, data = make_file(data)
    if not status:
    print(f'make_file error:\n\t{data}')
    return False, data
    fi = data
    status, data = ftp_upload(fi, ftp_folder, real)
    if not status:
    print(f'ftp_upload error:\n\t{data}')
    return False, data
    print(f'Done: {rec_num} records')
    if no_del: input('\n\nPress Enter to exit and delete file')
    os.remove(fi)
    return True, rec_num

    关于javascript - 在 Wordpress 站点上显示来自 MSAccess DB 的自定义数据的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56221096/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com