postgres jsonfield documentacion contrib python django postgresql django-models

python - jsonfield - django postgresql windows



¿Cómo usar esquemas en Django? (9)

Acabo de desarrollar un paquete para este problema: https://github.com/ryannjohnson/django-schemas .

Después de alguna configuración, simplemente puede llamar a set_db() en sus modelos:

model_cls = UserModel.set_db(db=''db_alias'', schema=''schema_name'') user_on_schema = model_cls.objects.get(pk=1)

El paquete utiliza las técnicas descritas en https://stackoverflow.com/a/1628855/5307109 y https://stackoverflow.com/a/18391525/5307109 , luego las envuelve para usarlas con los modelos de Django.

Me gustaría usar esquemas postgreSQL con django, ¿cómo puedo hacer esto?


Como se menciona en el siguiente ticket: https://code.djangoproject.com/ticket/6148 , podríamos establecer search_path para el usuario django.

Una forma de lograr esto es establecer search_path través del cliente psql , como

ALTER USER my_user SET SEARCH_PATH TO path;

La otra forma es modificar la aplicación django, de modo que si reconstruimos la base de datos, django no escupirá todas las tablas en public esquema public .

Para lograr esto, puede anular el DatabaseWrapper definido en django.db.backends.postgresql_psycopg2.base

  1. Crea el siguiente directorio:

    app/pg/ ├── __init__.py └── base.py

  2. Aquí está el contenido de 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

  3. En settings.py , agregue la siguiente configuración de base de datos:

    DATABASES = { ''default'': { ''ENGINE'': ''app.pg'', ''NAME'': ''db'', ''USER'': ''user'', ''PASSWORD'': '''', ''HOST'': '''', ''PORT'': '''', } }


Es un poco más complicado que escapar con dificultad. Eche un vistazo al Boleto #6148 en Django para quizás una solución o al menos un parche. Hace algunos pequeños cambios en el núcleo de django.db, pero con suerte se incluirá oficialmente en django. Después de eso, solo es cuestión de decir

db_schema = ''whatever_schema''

en la clase Meta o para un conjunto de cambio global

DATABASE_SCHEMA = ''default_schema_name''

en settings.py

ACTUALIZACIÓN: 2015-01-08

El problema correspondiente en django ha estado abierto durante 7 años y el parche no funcionará más. La respuesta correcta a esto debería ser ...

Por el momento no puede usar esquemas postgreSQL en django de fábrica.


He estado usando:

db_table = ''"schema"."tablename"''

en el pasado sin darse cuenta de que solo funcionaba para operaciones de solo lectura. Cuando intente agregar un nuevo registro, fallaría porque la secuencia sería algo así como "schema.tablename" _column_id_seq.

db_table = ''schema/"./"tablename''

funciona hasta ahora. Gracias.


He tenido cierto éxito solo diciendo

db_table = ''schema/"./"tablename''

en la clase Meta, pero eso es realmente feo Y solo lo he usado en escenarios limitados; podría romperse si intentas algo complicado. Y como dije antes, en realidad no es compatible ...


No hay soporte explícito de Django para los esquemas postgreSQL.

Al usar Django (0.95), tuvimos que agregar un search_path al conector de la base de datos Django para PostgreSQL, porque Django no admitía especificar el esquema que usaban las tablas administradas por el ORM.

Tomado de:

http://nxsy.org/using-postgresql-schemas-with-sqlalchemy-and-elixir

La respuesta general es usar SQLAlchemy para construir el SQL correctamente.

Ah, y aquí hay otro enlace con algunas sugerencias sobre lo que puedes hacer con la base de Django, extendiéndola para tratar de apoyar tu esquema:

http://news.ycombinator.com/item?id=662901


Para la base de datos del servidor SQL:

db_table = "[your_schema].[your_table]"


Sé que esta es una pregunta bastante antigua, pero una solución diferente es alterar SEARCH_PATH.

Ejemplo

Digamos que tienes tres tablas.

  1. schema1.table_name_a
  2. schema2.table_name_b
  3. table_name_c

Puedes ejecutar el comando:

SET SEARCH_PATH to public,schema1,schema2;

Y consulte las tablas por sus nombres de tabla solo en django.

Ver 5.7.3. La ruta de búsqueda de esquemas