2013-04-04 55 views
6

Tôi thấy một nơi nào đó mà bạn có thể xác định kích thước cột cho cột Integer (ví dụ: Integer (20), Integer (10), vv) nhưng vì lý do nào đó, có vẻ như sqlalchemy bỏ qua các kích thước đó trong việc tạo truy vấn bảng nó tạo ra thông qua create_all():sqlalchemy Kích thước cột số nguyên

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) 

tạo các truy vấn sau đây:

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 
) 

Nếu đó không phải là cách thích hợp để làm điều này, là gì?

+0

Ngoài kích thước trên số nguyên trong MySQL là * chủ yếu * vô nghĩa. Tôi chỉ sử dụng Integer. Xem http://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/ –

Trả lời

6

Chức năng này là deprecated in version 7.

Nếu bạn đang sử dụng MySQL, bạn có thể sử dụng mysql.INTEGER datatype:

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

Điều đó làm mất điểm của việc sử dụng ORM, phải không? (Tôi cũng cần hỗ trợ Oracle) – Ofir

+0

Từ những gì tôi đã thấy, khi sử dụng kiểu mysql.INTEGER và kết nối tới một cơ sở dữ liệu không phải mysql, kiểu này sẽ chuyển thành kiểu Integer tích hợp, vì vậy Oracle vẫn hoạt động. Tôi không nghĩ rằng INTEGER của Oracle cho phép kích thước được chỉ định. –

Các vấn đề liên quan