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

如何将Django应用整合至PHP应用创建的现有SQL数据库?

Django 整合现有PHP创建的MySQL数据库

你手里的现有数据库是MySQL(从SQL Dump里的MyISAM引擎和phpMyAdmin信息可判断),下面是具体的整合步骤:

1. 修改Django数据库配置

打开项目根目录的settings.py,找到DATABASES配置块,替换为MySQL的连接信息,示例如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bincomphptest',  # 对应SQL里的数据库名
        'USER': '你的MySQL用户名',
        'PASSWORD': '你的MySQL密码',
        'HOST': 'localhost',  # 对应SQL里的Host配置
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'latin1',  # 匹配SQL里的表字符集
        },
    }
}

注意:需要先安装MySQL驱动,执行pip install mysqlclient;若为Python3.10+版本,可改用pip install mysql-connector-python

2. 生成/编写对应数据库表的Model

方法一:自动生成(推荐)

Django自带的inspectdb命令可直接读取现有数据库结构,生成对应的Model代码。在项目根目录执行:

python manage.py inspectdb

命令会输出所有表的Model代码,找到agentname表对应的部分,复制到目标app下的models.py中,生成的代码大致如下:

from django.db import models

class Agentname(models.Model):
    name_id = models.AutoField(primary_key=True)
    firstname = models.CharField(max_length=255)
    lastname = models.CharField(max_length=255)
    email = models.CharField(max_length=255, blank=True, null=True)
    phone = models.CharField(max_length=13)
    pollingunit_uniqueid = models.IntegerField()

    class Meta:
        managed = False  # 告诉Django不要管理该表的创建/修改
        db_table = 'agentname'

方法二:手动编写

若自动生成的代码有偏差,可对照SQL表结构手动编写Model,注意字段类型对应:

  • name_id为自增主键,用AutoField(primary_key=True)
  • firstname/lastname是必填的varchar(255),用CharField(max_length=255)
  • email为可选字段,需添加blank=True, null=True
  • phone是char(13),用CharField(max_length=13)
  • pollingunit_uniqueid是int(11),用IntegerField()
    必须在Meta类中设置managed=False和db_table='agentname',避免Django误操作现有表。

3. 让Django识别现有表

由于表已存在,不能直接执行makemigrations和migrate创建表,需执行以下命令让Django标记这些表已完成迁移:

python manage.py migrate --fake-initial

若仅针对单个app,可指定app名:

python manage.py migrate --fake-initial 你的app名称

4. 测试数据读写

打开Django Shell验证是否能正常访问数据:

python manage.py shell

在Shell中执行:

from 你的app名称.models import Agentname
# 查询所有数据
agents = Agentname.objects.all()
for agent in agents:
    print(agent.firstname, agent.lastname)

若能正常输出数据,说明整合成功。


附你提供的现有agentname表结构:

-- Table structure for table `agentname`
DROP TABLE IF EXISTS `agentname`;
CREATE TABLE IF NOT EXISTS `agentname` (
  `name_id` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(255) NOT NULL,
  `lastname` varchar(255) NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `phone` char(13) NOT NULL,
  `pollingunit_uniqueid` int(11) NOT NULL,
  PRIMARY KEY (`name_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:01:19