在django開發過程中,需要從自己的mysql數據庫中讀取數據並展示,由於表格是存在的,不需要像其他django項目一樣在數據庫中創建專門的表格,大致過程如下
1. 設置setting中的database信息
# setting.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<你的mysql數據庫名>',
'USER': '<mysql用戶名>',
'PASSWORD': '<mysql密碼>',
'HOST': '127.0.0.1',
'PORT': 3306
}
}
2.反向生成models.py
利用django的inspectdb,django通過setting當中的database配置信息找到數據庫表,並輸出到默認輸出設備
python .\manage.py inspectdb
輸出大致如下,不同項目以及表格輸出會有所區別,但是形式基本一樣
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
# * Rearrange models' order
# * Make sure each model has one field with primary_key=True
# * Make sure each ForeignKey has `on_delete` set to the desired behavior.
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from __future__ import unicode_literals
from django.db import models
class Riderecords(models.Model):
rider = models.CharField(db_column='Rider', max_length=32) # Field name made lowercase.
trainnum = models.CharField(db_column='TrainNum', max_length=128) # Field name made lowercase.
seatnum = models.CharField(db_column='SeatNum', max_length=16) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Riderecords'
class AuthGroup(models.Model):
name = models.CharField(unique=True, max_length=80)
class Meta:
managed = False
db_table = 'auth_group'
class AuthUser(models.Model):
password = models.CharField(max_length=128)
last_login = models.DateTimeField(blank=True, null=True)
is_superuser = models.IntegerField()
username = models.CharField(unique=True, max_length=150)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.CharField(max_length=254)
is_staff = models.IntegerField()
is_active = models.IntegerField()
date_joined = models.DateTimeField()
class Meta:
managed = False
db_table = 'auth_user'
class AuthUserGroups(models.Model):
user = models.ForeignKey(AuthUser, models.DO_NOTHING)
group = models.ForeignKey(AuthGroup, models.DO_NOTHING)
class Meta:
managed = False
db_table = 'auth_user_groups'
unique_together = (('user', 'group'),)
class DjangoSession(models.Model):
session_key = models.CharField(primary_key=True, max_length=40)
session_data = models.TextField()
expire_date = models.DateTimeField()
class Meta:
managed = False
db_table = 'django_session'
直接拷貝到models.py文件中去
3.將改動應用到數據庫表
執行兩個命令
python manage.py makemigrations
python manage.py migrate
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
到這步基本大多數人都可以解決自己的問題了,但是我的情況又比較複雜,可以看到我上面的models裏的表格語言中,我的表格是沒有主鍵之類的字段的,而django項目會默認給你的表格一個id字段,用於標記每條記錄,網上說的內容大致是去掉那一行就行了,然而我的輸出內容中,並沒有被自動添加id字段,沒得刪,然而在編寫views過程中,使用
models.Personinfo.objects.all()
獲得的內容傳遞給html前端之後,獲取內容的時候總是會報錯,找不到id這個字段,一臉懵啊,表格中也沒有這個字段,models中也沒有添加這個字段,但是通過objects.all()方式獲得的內容,總是會出現這個問題,只能換一種方式
models.Personinfo.objects.values_list('name', 'sex', 'age')