2013-04-04 3 views
6

Ho visto da qualche parte che è possibile definire una dimensione di colonna per colonne Integer (ad esempio Integer (20), Integer (10), ecc.) Ma per qualche ragione, sembra che sqlalchemy ignori quelle dimensioni nella creazione interrogazione tavolo produce attraverso create_all():sqlalchemy Dimensione colonna integer

class Job(Base): 
    __tablename__ = "t_job" 

    id = Column(Integer(20), Sequence('%s_id_seq' % __tablename__), primary_key=True, nullable=False) 
    name = Column(String(30)) 
    company_id = Column(Integer(20), ForeignKey("t_company.id", ondelete="CASCADE"), nullable=False) 

produce la seguente query:

CREATE TABLE t_job (
     id INTEGER NOT NULL AUTO_INCREMENT, 
     name VARCHAR(30), 
     company_id INTEGER NOT NULL, 
     PRIMARY KEY (id), 
     FOREIGN KEY(company_id) REFERENCES t_company (id) ON DELETE CASCADE 
) 

Se questo non è un modo corretto di fare questo, che cosa è?

+0

Anche la dimensione su interi in MySQL è in gran parte * * inutile. Userei solo Integer. Vedi http://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/ –

risposta

6

Questa funzionalità era deprecated in version 7.

Se si sta utilizzando MySQL, è possibile utilizzare il tipo di dati mysql.INTEGER:

from sqlalchemy.dialects import mysql 

class Job(Base): 
    __tablename__ = "t_job" 

    id = Column(mysql.INTEGER(20), Sequence('%s_id_seq' % __tablename__), primary_key=True, nullable=False) 
    name = Column(String(30)) 
    company_id = Column(Integer(20), ForeignKey("t_company.id", ondelete="CASCADE"), nullable=False) 
+0

Che non ha senso usare un ORM, vero? (Devo anche supportare Oracle) – Ofir

+0

Da quello che ho visto, quando si usa il tipo mysql.INTEGER e si connette a un database non mysql, il tipo ritorna al tipo Integer incorporato, quindi Oracle dovrebbe funzionare. Non penso che INTEGER di Oracle consenta di specificare la dimensione. –