2010-04-21 27 views
7

Tengo un proyecto Torres de alta tensión y un modelo SQLAlchemy que implementa esquema tablas cualificados:Tablas con esquemas calificados con SQLAlchemy, SQLite y Postgresql?

class Hockey(Base): 
    __tablename__ = "hockey" 
    __table_args__ = {'schema':'winter'} 
    hockey_id = sa.Column(sa.types.Integer, sa.Sequence('score_id_seq', optional=True), primary_key=True) 
    baseball_id = sa.Column(sa.types.Integer, sa.ForeignKey('summer.baseball.baseball_id')) 

Este código funciona muy bien con PostgreSQL, pero falla al utilizar SQLite en la tabla y nombres de clave externa (debido a la falta de SQLite de apoyo esquema)

sqlalchemy.exc.OperationalError: (OperationalError) desconoce la base de datos "invierno" 'PRAGMA "invierno" .table_info ("hockey")'()

me gustaría seguir utilizando SQLite para dev y pruebas.

¿Hay alguna manera de que esto falle correctamente en SQLite?

+2

¿Qué dificultades tiene con Postgres en sus máquinas de desarrollo y prueba? –

+4

Haría su configuración más simple.Utiliza Postgres de punta a punta. No realice la prueba en SQLIte y suéltelo en Postgres. – Kuberchaun

+1

Seguir con SQLite hace que el flujo de trabajo sea más fácil, especialmente para las personas de control de calidad, ya que no tienen que estar al tanto de su prueba db. Simplemente ir con Postgres a todas partes es un plan sólido "B" –

Respuesta

11

I'd like to continue using SQLite for dev and testing.

Is there a way of have this fail gracefully on SQLite?

Es difícil saber por dónde empezar con ese tipo de pregunta. Asi que . . .

Detenerlo. Sólo detenerlo.

Hay algunos desarrolladores que no tienen el lujo de desarrollar en su plataforma de destino. Su vida es difícil: el código cambia (y a veces compiladores) de un entorno a otro, depurando dos veces (a veces teniendo que depurar de forma remota en la plataforma de destino), llegando gradualmente a la conciencia de que el roer en sus intestinos es en realidad el comienzo de una úlcera

Instalar PostgreSQL.

Cuando puede utilizar el mismo entorno de base de datos para el desarrollo, prueba y despliegue, que debería .

Sin mencionar el equipo de control de calidad. ¿Por qué diablos están probando cosas que no van a enviar? Si está implementando en PostgreSQL, asegure la calidad de su trabajo en PostgreSQL.

En serio.

+0

Mi edición apareció como una nueva respuesta. Esta respuesta tiene mi texto completo. Al otro le falta mi conspicua preocupación por todas las buenas personas en QA. –

+0

Si hay disponible un servidor al que todos puedan acceder para el desarrollo y las pruebas, PostgreSQL podría instalarse allí en lugar de localmente en todas las máquinas. Esto facilitaría la carga de los evaluadores ya que no necesitarían instalarlo. – jpmc26

2

Soy sólo un principiante a mí mismo, y no he utilizado los pilones, pero ...

Me he dado cuenta de que usted está combinando la mesa y la clase asociada juntos. ¿Qué tal si los separas?

import sqlalchemy as sa 
meta = sa.MetaData('sqlite:///tutorial.sqlite') 
schema = None 
hockey_table = sa.Table('hockey', meta, 
         sa.Column('score_id', sa.types.Integer, sa.Sequence('score_id_seq', optional=True), primary_key=True), 
         sa.Column('baseball_id', sa.types.Integer, sa.ForeignKey('summer.baseball.baseball_id')), 
         schema = schema, 
        ) 

meta.create_all() 

Posteriormente, se podría crear una separada

class Hockey(Object): 
    ... 

y

mapper(Hockey, hockey_table) 

Entonces acaba de establecer esquema anterior = Ninguno todas partes si está utilizando SQLite, y el valor (s) que desea de otra manera.

No tiene un ejemplo de trabajo, por lo que el ejemplo anterior tampoco funciona. Sin embargo, como han señalado otras personas, tratar de mantener la portabilidad en las bases de datos es, al final, un juego perdedor. Agregaría un +1 a las personas sugiriendo que solo usen PostgreSQL en todas partes.

HTH, Saludos.

+0

¿Qué hay de las personas que tienen una política de cooperación de usar MSSQL (producto de Windows) mientras que el desarrollo de aplicaciones ocurre en el lado de Linux? Si bien sería genial usar PostgreSQL dada la cantidad de datos que contienen los datos actuales, la migración está lejos en el futuro. – Thornhale

Cuestiones relacionadas