2013-04-04 80 views
6

我看到某处可以为整数列(例如Integer(20),Integer(10)等)定义列大小,但由于某些原因,sqlalchemy似乎忽略了create中的那些大小表查询它产生通过create_all():sqlalchemy整数列大小

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) 

产生如下查询:

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 
) 

如果不是这样做一个适当的方式是什么?

+0

另外在MySQL在整数大小是* *大多是毫无意义的。我只是使用Integer。请参阅http://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/ – 2013-05-16 07:48:06

回答

6

此功能是deprecated in version 7

如果你正在使用MySQL,你可以使用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

这确实错过了使用ORM的观点,不是吗? (我也需要支持Oracle) – Ofir 2013-04-04 07:38:09

+0

根据我所看到的,当使用mysql.INTEGER类型并连接到非mysql数据库时,类型将恢复为内置的Integer类型,因此Oracle仍然可以工作。我不认为Oracle的INTEGER允许指定大小。 – 2013-04-04 08:02:21