【问题标题】:Django MySQL on a different database不同数据库上的 Django MySQL
【发布时间】:2017-01-30 06:09:42
【问题描述】:

例如,这里是在我的 settings.py 文件中设置的数据库。

DATABASES = {
    'default': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'my_blog': {
        'NAME': 'my_blog',
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '192.168.1.40',
        'USER': 'mysql_user',
        'PASSWORD': 'priv4te'
    }
}

我需要从 my_blog 数据库中获取一些信息。 我没有这个数据库的写权限,我只需要执行简单的select 查询。 你建议我怎么做?

【问题讨论】:

    标签: python mysql django database


    【解决方案1】:

    当您使用多个数据库时,您需要做的是更改数据库路由规则以用于您正在为相同的查询进行的查询。

    您可以在此处阅读更多内容。 https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

    class MyBlogRouter(object):
        """
        A router to control all database operations on models in the
        auth application.
        """
        def db_for_read(self, model, **hints):
            """
            Attempts to read blog models go to my_blog.
            """
            if model._meta.app_label == 'my_blog':
                return 'my_blog'
            return None
    

    在你的 settings.py 中

    DATABASE_ROUTERS = ['path.to.MyBlogRouter',]
    

    【讨论】:

    • 例如,我应该如何编写我的模型?
    • 模型和它的字段应该包含从数据库结构中提取的模式结构。一旦你完成了。您需要为它创建一个假迁移。以便为您的 Django 应用程序生成正确的内容类型。那么上面应该做到这一点。正确测试。
    【解决方案2】:

    请在您的数据获取实现中执行以下操作。

    from django.db import connections
    
    cursor = connections['my_blog'].cursor()
    cursor.execute('yourquery')
    data = cursor.fetchall() # fetches all rows
    data = cursor.fetchone() # fetches one row
    

    【讨论】:

    • 谢谢,这也有效。仍在努力寻找最好的方法。
    • 这在我应该使用复杂的连接查询时会很有帮助,我猜。
    • 当您说,您没有对数据库的写入权限意味着您不会在该数据库上使用 django 模型创建表。另外,我不建议编写数据库路由器,因为您只会将它用于 SELECT 查询。您可以做的是在您的 Django 项目中编写一个 Global 方法,该方法将连接到 my_blog 数据库并返回查询数据。你有相应数据库表的 django 模型吗?如果是,那么你可以写一个路由器。
    【解决方案3】:

    您可以为此目的使用关键字“使用”。

    SomeModel.objects.using('my_blog').all()
    

    除此之外,您可以使用自定义数据库路由器来路由请求(READ/WRITE/UPDATE)。

    更多信息请阅读:https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2014-08-17
      • 2011-09-05
      相关资源
      最近更新 更多