2013-04-04 15 views
6

Widziałem gdzieś, że można zdefiniować rozmiar kolumny dla kolumn całkowitych (np. Integer (20), Integer (10) itp.), Ale z jakiegoś powodu wydaje się, że sqlalchemy zignorować te rozmiary w tworzeniu kwerendy tabela produkuje poprzez create_all():sqlalchemy Integer rozmiar kolumny

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) 

produkuje następujące zapytanie:

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 
) 

jeśli to nie jest właściwy sposób, aby to zrobić, co to jest?

+0

Również na wielkość całkowitych w MySQL * głównie * bezcelowe. Po prostu użyłbym Integer. Zobacz http://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/ –

Odpowiedz

6

Ta funkcja to deprecated in version 7.

Jeśli używasz MySQL, można użyć mysql.INTEGER Typ danych:

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

To pomija punkt użycia ORM, czyż nie? (Potrzebuję również wsparcia dla Oracle). – Ofir

+0

Z tego, co widziałem, kiedy używa się typu mysql.INTEGER i łączy się z bazą danych inną niż mysql, typ powraca do wbudowanego typu Integer, więc Oracle powinien nadal działać. Nie sądzę, że Oracle INTEGER pozwala na określenie rozmiaru. –

Powiązane problemy