Django - 加入非 Django 表的正确方法
Django - right way to join not-django tables
我有旧的 cms 数据库,结构不完善,无法修改,但我需要使用 django 进行查询
TABLE posts
(post_id
)
TABLE posts_text
(post_id
,
post_text
)
TABLE episode
(id
,
season_id
,
episode_name
)
TABLE episode_post_relationship
(id
,
season_id
,
episode_id
,
post_id
)
请帮助我创建具有正确 table 关系的 Django 模型。我应该使用 OneToOneField、ForeignKey、ManyToManyField 等还是纯连接?
我正在尝试使用 posts_text
从 episode_post_relationship table 中获取 剧集 。 posts_text
和 posts
.some_other_col
但不能指定 episode_post_relationship
table 应该在 post_id
上加入 posts_text
并且 posts
table.
也是如此
作为 per documentation,您也可以连接到遗留数据库。为此,您需要将当前的 Django 项目连接到该数据库,例如,通过 django-admin.py startproject yourproject
创建一个新项目,然后转到设置并像这样更新 DATABASES
设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_NAME',
'USER': 'DB_USER',
'PASSWORD': 'DB_PASSWORD',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}
然后是运行python manage.py inspectdb
。您也可以将其输出为 python manage.py inspectdb > models.py
之类的模型
更新:
据我所知,您的数据库应该是:
class Post(models.Model):
post_id = models.AutoField(primary_key=True)
class Meta:
db_table = 'posts'
class PostText(models.Model):
post = models.ForeignKey(Post)
post_text = models.TextField()
class Meta:
db_table = 'posts_text'
class Season(models.Model):
# season fields
class Meta:
db_table = 'season'
class Episode(models.Model):
season = models.ForeignKey(Season)
episode_name = models.CharField(max_length=255) # depends on your DB
posts = models.ManyToManyField(Post, through="EpisodePost")
class Meta:
db_table='episode'
class EpisodePost(models.Model):
season = models.ForeignKey(Season)
episode = models.ForeignKey(Episode)
post = models.ForeignKey(Post)
class Meta:
db_table='episode_post_relationship'
但是,在您对上述关系进行任何操作之前,请确保备份您当前的数据库。
我有旧的 cms 数据库,结构不完善,无法修改,但我需要使用 django 进行查询
TABLE posts
(post_id
)
TABLE posts_text
(post_id
,
post_text
)
TABLE episode
(id
,
season_id
,
episode_name
)
TABLE episode_post_relationship
(id
,
season_id
,
episode_id
,
post_id
)
请帮助我创建具有正确 table 关系的 Django 模型。我应该使用 OneToOneField、ForeignKey、ManyToManyField 等还是纯连接?
我正在尝试使用 posts_text
从 episode_post_relationship table 中获取 剧集 。 posts_text
和 posts
.some_other_col
但不能指定 episode_post_relationship
table 应该在 post_id
上加入 posts_text
并且 posts
table.
作为 per documentation,您也可以连接到遗留数据库。为此,您需要将当前的 Django 项目连接到该数据库,例如,通过 django-admin.py startproject yourproject
创建一个新项目,然后转到设置并像这样更新 DATABASES
设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_NAME',
'USER': 'DB_USER',
'PASSWORD': 'DB_PASSWORD',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}
然后是运行python manage.py inspectdb
。您也可以将其输出为 python manage.py inspectdb > models.py
更新:
据我所知,您的数据库应该是:
class Post(models.Model):
post_id = models.AutoField(primary_key=True)
class Meta:
db_table = 'posts'
class PostText(models.Model):
post = models.ForeignKey(Post)
post_text = models.TextField()
class Meta:
db_table = 'posts_text'
class Season(models.Model):
# season fields
class Meta:
db_table = 'season'
class Episode(models.Model):
season = models.ForeignKey(Season)
episode_name = models.CharField(max_length=255) # depends on your DB
posts = models.ManyToManyField(Post, through="EpisodePost")
class Meta:
db_table='episode'
class EpisodePost(models.Model):
season = models.ForeignKey(Season)
episode = models.ForeignKey(Episode)
post = models.ForeignKey(Post)
class Meta:
db_table='episode_post_relationship'
但是,在您对上述关系进行任何操作之前,请确保备份您当前的数据库。