gpt4 book ai didi

mysql - 如何在带有django的mysql中的两个不同模式中使用同名的两个表

转载 作者:行者123 更新时间:2023-11-30 21:57:40 25 4
gpt4 key购买 nike

我正在使用两个 mysql 模式 X 和 Y,它们都包含多个表,但两个模式中有一个表具有相同的名称。

两种模式如下:

+--------------+--+--------------+
| X | | Y |
+--------------+--+--------------+
| name | | album_info |
+--------------+--+--------------+
| invite | | photo_info |
+--------------+--+--------------+
| photo | | photo |
+--------------+--+--------------+
| user_details | | temp |
+--------------+--+--------------+

现在,我想查询这两个表,但是当我在 models.py 文件中写入具有相同名称的表结构时,它会抛出错误/异常。我在 routers.py 文件中声明了两个表,如下所示:

  modelDatabaseMap = {
.
'photo': 'default',
.
.
.
'photo': 'y',
}

(X 是我的默认架构)。声明 i models.py 如下:

 class Photo(models.Model):
id = models.AutoField(db_column='ID', primary_key=True)
has_tagged_with = models.IntegerField()
has_reposted_with = models.IntegerField()
.
.

class Meta:
managed = False
db_table = 'photo'

class Photo(models.Model):
id = models.AutoField(db_column='ID', primary_key=True)
account_id = models.IntegerField()
p_id = models.IntegerField()
is_profile = models.IntegerField()
.
.

class Meta:
managed = False
db_table = 'photo'

现在,歧义首先出现在名称上,出现在 models.py 中的声明中,其次出现在查询中。我坚持如何通过 orm 分别查询两个表。 有关此的任何帮助/引导都会有所帮助。提前致谢。

最佳答案

根据您的DATABASES 配置,您可以尝试:

  1. 更改您的模型名称或为每个模式创建一个具有不同 models 模块的新应用:

    class YPhoto(models.Model):
    ...

    class XPhoto(models.Model):
    ...
  2. 创建一个 router.py 模块:

    class MyRouter(object):

    def db_for_read(self, model, **hints):
    if model.__name__ == 'YPhoto':
    return 'Y'
    return None

    def db_for_write(self, model, **hints):
    if model.__name__ == 'YPhoto':
    return 'Y'
    return None

    def allow_relation(self, obj1, obj2, **hints):
    # Maybe you want to prevent relations between different schemas, it's up to you
    return True

    def allow_syncdb(self, db, model):
    return True
  3. 将路由器添加到settings.py:

    DATABASE_ROUTERS = ['myapp.models.MyRouter',]

检查 docs关于数据库路由。

关于mysql - 如何在带有django的mysql中的两个不同模式中使用同名的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44538316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com