2013-04-16 30 views
0

我使用SQLAlchemy作爲我的ORM層來訪問我的MySQL數據庫。自動增量不寫入對象

下面是表,映射器和模型,我說的是:

CREATE TABLE user (
    uid INT(12) NOT NULL auto_increment, 
    email VARCHAR(128) NOT NULL, 
    password VARCHAR(128) NOT NULL, 
    display_name VARCHAR(128) NOT NULL, 
    timezone VARCHAR(96) NOT NULL, 
    join_date DATETIME NOT NULL, 
    last_login DATETIME NOT NULL, 
    verified INT(1) NOT NULL DEFAULT 0, 
    PRIMARY KEY (uid), 
    UNIQUE (email) 
) ENGINE=InnoDB; 

class User(object): 
    def __init__(self, id=0, email="", password="", displayName="", 
       timezone="UTC", joinDate=None, lastLogin=None, verified=False): 
    self.id = id 
    self.email = email 
    self.password = password 
    self.displayName = displayName 
    self.timezone = timezone 
    self.joinDate = joinDate or datetime.utcnow() 
    self.lastLogin = lastLogin or datetime.utcnow() 
    self.verified = verified 


userTable = sqlalchemy.Table('user', meta, autoload=True) 

sqlalchemy.orm.mapper(models.User, userTable, properties={ 
    'id': userTable.c.uid, 
    'displayName': userTable.c.display_name, 
    'joinDate': userTable.c.join_date, 
    'lastLogin': userTable.c.last_login 
} 

的問題是,每當我嘗試一個對象插入到通過ORM層的數據庫,我期待新生成的ID將被stpred放在我的原始對象中以供將來參考。否則,整個事情對我來說都是無用的。

>>> session = Session() 
>>> u = User(0, '[email protected]', 'asdf', 'Test User') 
>>> session.add(u) 
>>> session.flush() 
>>> u.id 
0 

有誰知道如何告訴SQLALchemy將ID保存到原始對象嗎?謝謝。

+3

你有沒有嘗試傳遞一個NULL(或無或任何它用於NULL)而不是零? – msw

+0

+1 - NULL與零不相同。 NULL使用下一個auto_increment ID,而零使用文字零。 – Aya

回答

0

當然,@ msw和@Aya是正確的。在插入數據庫之前,對象的id屬性必須爲None。