django-db2使用与数据库用户名不同的模式名称

时间:2016-03-22 16:15:24

标签: django python-2.7 django-models db2

在Django数据库中,用户名用作模式名称。

在DB2中没有数据库级用户。 OS用户将用于登录数据库。

在我的数据库中,我有两个不同的数据库用户和数据库模式名称 所以在使用db2作为后端的django中,如何使用不同的模式名来访问表?

编辑: 澄清我试图通过ORM而不是原始SQL进行访问。 ORM隐式使用用户名作为模式名称。我该如何避免?

2 个答案:

答案 0 :(得分:0)

DB2使用所谓的两个部分名称schemaname.objectname。每个对象(包括表)都可以通过整个名称引用。在会话中,存在当前模式,默认情况下将其设置为用户名。它可以通过SET SCHEMA myschema语句进行更改。

对于您的问题,有两种选择: 1)引用表格的全名:schemaname.tablename 2)使用set schema设置公共schemaname并仅引用表格。

答案 1 :(得分:0)

得到了解决方案:

1)我们可以使用以下查询来更改db2中的模式:

set schema schema_name;

2)我们可以在django startup上执行上面的查询。 我们必须在任何urls.py,manage.py文件中添加以下代码,这些文件将在启动时运行。

def set_schema(sender, **kwargs):
    from django.db import connection
    cursor = connection.cursor()
    try:
        cursor.execute("set schema schema_name")
    except Exception as e:
        print str(e)

from django.db.backends.signals import connection_created
connection_created.connect(set_schema)