2013-10-31 48 views
10

我正在使用Flask-SQLAlchemy(MySQL)將門戶遷移到Flask。下面是我用來創建我的數據庫爲我現有的門戶代碼:如何在SQLAlchemy中定義無符號整數

Users = """CREATE TABLE Users(
      id INT UNSIGNED AUTO_INCREMENT NOT NULL, 
      UserName VARCHAR(40) NOT NULL, 
      FirstName VARCHAR(40) NOT NULL, 
      LastName VARCHAR(40) NOT NULL, 
      EmailAddress VARCHAR(255) NOT NULL,  
      Password VARCHAR(40) NOT NULL,  
      PRIMARY KEY (id) 
      ) """ 

下面是我想在SQLAlchemy中使用它:

class Users(db.Model): 
     id   = db.Column(db.Integer, primary_key=True) 
     UserName  = db.Column(db.String(40)) 
     FirstName = db.Column(db.String(40)) 
     LastName  = db.Column(db.String(40)) 
     EmailAddress = db.Column(db.String(255)) 
     Password  = db.Column(db.String(40)) 

我的問題是,我該怎麼做SQLAlchemy模型被指定爲無符號整數?

+0

我修改你的問題的範圍限制在一個單一的問題(如何指定一個整數作爲無符號)。如果你願意,請提出你的第二個問題的第二個問題。我會在http://codereview.stackexchange.com上推薦「這是我的代碼,請提出建議」。 –

回答

26

SQLAlchemy類型(例如Integer)似乎試圖遵守標準的SQL數據類型。由於「無符號整數」不是標準數據類型,因此您不會看到類似於UnsignedIntegerInteger(unsigned=True)的內容。

在這些情況下(如MySQL等數據庫具有本身不是標準數據類型的數據類型或具有非標準選項的數據類型),可以通過獲取特定於方言的類型來訪問這些類型/選項。對於MySQL,您可以通過sqlalchemy.dialects.mysql module訪問這些類型的,像這樣......

from sqlalchemy.dialects.mysql import INTEGER 

class Users(db.Model): 
    id   = db.Column(INTEGER(unsigned=True), primary_key=True) 
    UserName  = db.Column(db.String(40)) 
    FirstName = db.Column(db.String(40)) 
    LastName  = db.Column(db.String(40)) 
    EmailAddress = db.Column(db.String(255)) 
    Password  = db.Column(db.String(40)) 
+1

請注意,我從來沒有嘗試過使用無符號整數作爲SQLAlchemy的主鍵,但我沒有看到爲什麼它不應該起作用。 –