小智 28
也许这会有所帮助.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS': {
'options': '-c search_path=your_schema'
},
'NAME': 'your_name',
'USER': 'your_user',
'PASSWORD': 'your_password',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
我从以下链接获得答案:http: //blog.amvtek.com/posts/2014/Jun/13/accessing-multiple-postgres-schemas-from-django/
k4m*_*4ml 27
我一直在用:
db_table = '"schema"."tablename"'
Run Code Online (Sandbox Code Playgroud)
在过去没有意识到只能用于只读操作.当您尝试添加新记录时,它将失败,因为序列将类似于"schema.tablename"_column_id_seq.
db_table = 'schema\".\"tablename'
Run Code Online (Sandbox Code Playgroud)
到目前为止工作.谢谢.
kmp*_*mpm 11
它比棘手的逃避要复杂一点.看看Django 中的Ticket #6148可能是一个解决方案,或者至少是一个补丁.它在django.db核心深处进行了一些小的改动,但它有望被正式包含在django中.之后,这只是一个问题
db_schema = 'whatever_schema'
Run Code Online (Sandbox Code Playgroud)
在Meta类或全局变更集中
DATABASE_SCHEMA = 'default_schema_name'
Run Code Online (Sandbox Code Playgroud)
在settings.py中
更新时间:2015-01-08
django中相应的问题已经开放了7年,那里的补丁将不再适用.对此的正确答案应该是......
目前你不能在开箱即用的django中使用postgreSQL架构.
如下面的故障单中所述:https:
//code.djangoproject.com/ticket/6148,我们可以search_path
为django用户设置.
实现此目的的一种方法是search_path
通过psql
客户端设置,如
ALTER USER my_user SET SEARCH_PATH TO path;
Run Code Online (Sandbox Code Playgroud)
另一种方法是修改django应用程序,这样如果我们重建数据库,django就不会吐出public
架构中的所有表.
为此,您可以覆盖DatabaseWrapper
定义的django.db.backends.postgresql_psycopg2.base
创建以下目录:
app/pg/
??? __init__.py
??? base.py
Run Code Online (Sandbox Code Playgroud)这是内容 base.py
from django.db.backends.postgresql_psycopg2.base import DatabaseWrapper
class DatabaseWrapper(DatabaseWrapper):
def __init__(self, *args, **kwargs):
super(DatabaseWrapper, self).__init__(*args, **kwargs)
def _cursor(self):
cursor = super(DatabaseWrapper, self)._cursor()
cursor.execute('SET search_path = path')
return cursor
Run Code Online (Sandbox Code Playgroud)在settings.py
,添加以下数据库配置:
DATABASES = {
'default': {
'ENGINE': 'app.pg',
'NAME': 'db',
'USER': 'user',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
Run Code Online (Sandbox Code Playgroud)我刚刚为这个问题开发了一个软件包:https://github.com/ryannjohnson/django-schemas.
经过一些配置后,您可以简单地调用set_db()
您的模型:
model_cls = UserModel.set_db(db='db_alias', schema='schema_name')
user_on_schema = model_cls.objects.get(pk=1)
Run Code Online (Sandbox Code Playgroud)
该软件包使用/sf/answers/114019881/和/sf/answers/1287406781/中描述的技术,然后将它们包装起来以便与Django模型一起使用.
Django 没有对 postgreSQL 模式的明确支持。
使用 Django (0.95) 时,我们必须向 PostgreSQL 的 Django 数据库连接器添加 search_path,因为 Django 不支持指定 ORM 管理的表所使用的架构。
取自:
http://nxsy.org/using-postgresql-schemas-with-sqlalchemy-and-elixir
一般的反应是使用 SQLAlchemy 正确构建 SQL。
哦,这里还有另一个链接,其中包含一些关于您可以使用 Django 基础做什么的建议,扩展它以尝试支持您的方案:
http://news.ycombinator.com/item?id=662901
归档时间: |
|
查看次数: |
31096 次 |
最近记录: |