You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python连接QNAP上WordPress的MariaDB 10数据库并创建新库?

解决方案:Python连接QNAP MariaDB并创建数据库供WordPress访问

一、先解决IP连接失败的问题

连接失败大概率是权限或网络配置问题,按以下步骤排查:

  • 开放MariaDB远程访问权限
    QNAP上的MariaDB默认只允许本地访问,需给数据库用户授权远程连接:

    1. 通过SSH登录QNAP,执行mysql -u root -p并输入数据库密码进入命令行。
    2. 运行授权命令(替换为你的用户名和密码):
      GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
      FLUSH PRIVILEGES;
      
      这里的%允许任意IP访问,若要更安全,可替换为你的PC固定IP。
  • 检查QNAP防火墙
    进入QNAP控制面板的防火墙设置,确保开放了3306端口(MariaDB默认端口),并允许你的PC IP访问该端口。

  • 修改MariaDB绑定地址
    找到QNAP上MariaDB的配置文件(通常路径为/etc/mysql/my.cnf或对应版本的子目录),将bind-address的值从127.0.0.1改为0.0.0.0(允许所有IP)或你的PC固定IP,然后重启MariaDB服务。

二、Python代码实现:自动创建数据库并写入数据

使用mysql-connector-python库操作数据库,先通过pip install mysql-connector-python安装依赖。

import mysql.connector
from mysql.connector import Error

# 替换为你的实际配置
DB_CONFIG = {
    'host': 'QNAP的IP地址',
    'user': 'MariaDB用户名',
    'password': 'MariaDB密码',
    'port': 3306
}
TARGET_DB = 'wp_custom_data'  # 自定义数据库名

def init_custom_database():
    try:
        # 先连接到MariaDB服务器(不指定数据库)
        conn = mysql.connector.connect(**DB_CONFIG)
        if conn.is_connected():
            cursor = conn.cursor()
            # 检查数据库是否存在
            cursor.execute(f"SHOW DATABASES LIKE '{TARGET_DB}'")
            if not cursor.fetchone():
                # 创建符合WordPress编码的数据库
                cursor.execute(f"CREATE DATABASE {TARGET_DB} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
                print(f"数据库 {TARGET_DB} 创建成功")
            else:
                print(f"数据库 {TARGET_DB} 已存在")
            
            # 可选:创建WordPress专用访问用户(推荐)
            # cursor.execute("GRANT SELECT, INSERT, UPDATE ON wp_custom_data.* TO 'wp_custom_user'@'localhost' IDENTIFIED BY '你的密码'")
            # cursor.execute("FLUSH PRIVILEGES")
            
            cursor.close()
            conn.close()
    except Error as e:
        print(f"数据库操作错误: {str(e)}")

# 初始化数据库
init_custom_database()

# 数据插入示例(根据你的需求调整)
def insert_data(data_tuple):
    try:
        db_config = DB_CONFIG.copy()
        db_config['database'] = TARGET_DB
        conn = mysql.connector.connect(**db_config)
        if conn.is_connected():
            cursor = conn.cursor()
            # 替换为你的表结构和插入语句
            insert_sql = "INSERT INTO custom_table (title, content) VALUES (%s, %s)"
            cursor.execute(insert_sql, data_tuple)
            conn.commit()
            print(f"成功插入{cursor.rowcount}条数据")
            cursor.close()
            conn.close()
    except Error as e:
        print(f"插入数据失败: {str(e)}")

# 调用示例
# insert_data(('测试标题', '测试内容'))

三、配置WordPress访问新数据库

WordPress默认使用自身数据库,要读取新创建的库,可通过主题代码实现:

在当前主题的functions.php中添加以下代码(替换为你的用户和数据库信息):

// 连接自定义数据库
function get_custom_db_connection() {
    // 参数:用户名、密码、数据库名、主机(WordPress在QNAP本地,用localhost即可)
    $custom_db = new wpdb('wp_custom_user', '你的密码', 'wp_custom_data', 'localhost');
    if ($custom_db->last_error) {
        error_log('自定义数据库连接失败: ' . $custom_db->last_error);
        return false;
    }
    return $custom_db;
}

// 使用示例:在主题模板中调用获取数据
// $db = get_custom_db_connection();
// if ($db) {
//     $data = $db->get_results("SELECT * FROM custom_table");
//     // 处理并输出数据
// }

四、安全与优化建议

  • 避免使用root用户进行Python和WordPress的数据库连接,创建专用用户并分配最小必要权限(比如Python仅需创建库、插入数据权限,WordPress仅需读取权限)。
  • 保持数据库字符集为utf8mb4,与WordPress默认一致,防止中文或特殊字符乱码。
  • QNAP重启后,确认MariaDB服务自动启动,防火墙规则未被重置。

内容的提问来源于stack exchange,提问作者Morten Skerra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:37:43