Я использую 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 слой, я ожидаю, что вновь сгенерированный идентификатор, который будет создан в моем исходном объекте для дальнейшего использования. В противном случае все это было бы бесполезно для меня.
>>> session = Session()
>>> u = User(0, '[email protected]', 'asdf', 'Test User')
>>> session.add(u)
>>> session.flush()
>>> u.id
0
Кто-нибудь знает, как сказать SQLALchemy, чтобы сохранить идентификатор в исходном объекте? Спасибо.
Вы пытались передать NULL (или None или что-то другое, что он использует для NULL) вместо нуля? – msw
+1 - NULL - это не то же самое, что и ноль. NULL использует следующий идентификатор auto_increment, тогда как нуль использует буквальный ноль. – Aya