[转载]Django操作已经存在的表

转载自:http://blog.csdn.net/itas109
QQ技术交流群:129518033


环境:
Python : 3.5.4
Django : 1.11
编译器:VS2013 update 5
系统环境:Windows 7 64bit


前言

通过Django的models.py文件可以生成相应的数据库,但是对于已经存在的数据库该怎么处理呢?

1.配置Django你的数据库参数

通过编辑XXX/settings.py中的DATABASES设置并将值分配给“default”连接的以下键来执行此操作:

这里以MySQL为例。
由于mysqldb-python这个模块不支持Python3.4以上版本,因此只能安装pymysql库。

pip install pymysql
import pymysql         # 一定要添加这两行!
pymysql.install_as_MySQLdb()

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'HOST':'192.168.1.100',
            'PORT':'3306',
            'USER':'root',
            'PASSWORD':'123456',
        }
}
image.png

2.自动生成models

Django附带了一个名为inspectdb程序,它可以通过现有数据库来创建模型。 运行一下命令行可以查看输出:

$ python manage.py inspectdb

可以直接另存到文件

$ python manage.py inspectdb > models.py

清理模型后,将文件命名为models.py并将其放在包含应用程序的Python包中。 然后将应用程序添加到INSTALLED_APPS设置中。

默认情况下,inspectdb创建非托管模型。 也就是说,在模型的Meta类中,managed = False告诉Django不要管理每个表的创建,修改和删除:

class Person(models.Model):
    id = models.IntegerField(primary_key=True)
    first_name = models.CharField(max_length=70)
    class Meta:
       managed = False
       db_table = 'CENSUS_PERSONS'

如果你想让Django管理表的生命周期,你需要将上面的托管选项更改为True(或者只是删除它,因为True是它的默认值)。

3.建立核心Django表

运行migrate命令以安装任何额外需要的数据库记录,例如管理员权限和内容类型:

$ python manage.py migrate

image.png

4.测试

在XXX/views.py中

from django.shortcuts import render

from mydjango import models

# Create your views here.
def test(request):
    #return HttpResponse("just test")
    if request.method == "POST":
        username = request.POST.get("username",None)
        password = request.POST.get("password",None)

        print(username,password)

    user_list = models.UserDetails.objects.all().values('user_name','user_password')

    return render(request,"test.html",{"data":user_list})

5.结果

image.png

你可能感兴趣的:([转载]Django操作已经存在的表)