Peewee没有设置最后一个插入ID

时间:2015-08-20 13:55:16

标签: python mysql peewee

我使用的是mysql数据库。 Peewee未在id

之后设置save()字段

Peewee模特:

class OAuthAccount(BaseModel):
    id = BigIntegerField(primary_key=True,index=True,unique=True , db_column="id")
    oauth_provider_id = IntegerField(null=False)
    oauth_uid = CharField()
    oauth_token = CharField()
    oauth_token_secret = CharField()
    username = CharField()
    inserter = BigIntegerField(null=True,db_column="inserter_id")
    insert_date = DateTimeField(null=True,default=fn.NOW())
    updater = BigIntegerField(null=True,db_column="updater_id")
    update_date = DateTimeField(null=True)
    extra_data = CharField()

保存代码:

oauthUser = OAuthAccount(
                    oauth_provider_id= formData.get("oauth_provider_id"),
                    oauth_uid = formData.get("oauth_uid"),
                    oauth_token = formData.get("oauth_token"),
                    oauth_token_secret=formData.get("oauth_token_secret"),
                    username = formData.get("username"),
                    inserter_id = g.auth.userId(),
                    extra_data = formData.get("extra_data")
                )
oauthUser.save()
print "id => " + str(oauthUser.id)

输出为:id => None

该行已成功插入数据库。但id仍为None

3 个答案:

答案 0 :(得分:1)

我不明白但是当我做这个改变时它起作用了:

id = BigIntegerField(primary_key=True,index=True,unique=True , db_column="id")        
->
id = BigIntegerField( db_column="id")

它也适用于这种变化:

id = BigIntegerField(primary_key=True,index=True,unique=True , db_column="id")
->
id = PrimaryKeyField( db_column="id")

当我放primary_key=True时,它不起作用。

id = BigIntegerField(primary_key=True , db_column="id")

也许这是一个错误?

答案 1 :(得分:1)

这不是一个错误本身,但只有PrimaryKeyField或具有已定义序列的字段被视为自动递增。

使用一些代码,您可以为BigInt主键字段添加自定义字段类型。

答案 2 :(得分:1)

而不是:

class OAuthAccount(BaseModel):
    id = BigIntegerField(primary_key=True,index=True,unique=True , db_column="id")

尝试:

class OAuthAccount(BaseModel):
    id = PrimaryKeyField()

然后idsave之后将在您的模型上设置create字段。

如果你需要使用bigint,你需要继承PrimaryKeyField