- 論壇徽章:
- 0
|
最近在用SQLAlchemy進(jìn)行數(shù)據(jù)庫(kù)編程,我用如下代碼新建表并添加主鍵:
class Admin(db.Model):
__tablename__ = 'admin_info'
admin_id = db.Column("admin_id", db.String(20), primary_key=True)
key_id = db.Column("key_id", db.INT, primary_key=True)
key_comment = db.Column("key_comment", db.String(20))
lock_id = db.Column("lock_id", db.BIGINT, primary_key=True)
def __init__(self, admin_id, key_id, key_comment, lock_id):
self.admin_id = admin_id
self.key_id = key_id
self.key_comment = key_comment
self.lock_id = lock_id
def __repr__(self):
return 'Administrator %r' % self.admin_id
運(yùn)行總是報(bào)錯(cuò):<(OperationalError) (1075, 'Incorrect table definition; there can be only one auto column and it must be defined as a key') '\nCREATE TABLE admin_info (\n\tadmin_id VARCHAR(20) NOT NULL, \n\tkey_id INTEGER NOT NULL, \n\tkey_comment VARCHAR(20), \n\tlock_id BIGINT NOT NULL AUTO_INCREMENT, \n\tPRIMARY KEY (admin_id, key_id, lock_id)\n)\n\n' ()> ps:惡心死我了
但是這么簡(jiǎn)單代碼,我一行一行的檢查,并沒(méi)有發(fā)現(xiàn)什么錯(cuò)誤啊。于是我就只有請(qǐng)出谷歌兄幫忙了,搗騰了大半天,我艸,終于找到問(wèn)題出在哪兒了。。。原來(lái)在新建表的時(shí)候,添加多主鍵是由默認(rèn)規(guī)則的,SQLAlchemy文檔如是說(shuō):“When creating tables, SQLAlchemy will automatically set AUTO_INCREMENT on the first Integer primary key column which is not marked as a foreign key.You can disable this behavior by passing False to the autoincrement argument of Column. This flag can also be used to enable auto-increment on a secondary column in a multi-column key for some storage engines”,擦,這就是問(wèn)題的關(guān)鍵了,我的key_id就是定義為整型的,且為主鍵,它給勞資默認(rèn)為自增長(zhǎng)的了,怪不得報(bào)錯(cuò),尼瑪,坑死我了。。。最后說(shuō)一下解決辦法吧,在key_id = db.Column("key_id", db.INT, primary_key=True)這行的括號(hào)里邊添加一句autoincrement=False就OK了
發(fā)帖的初衷是希望以后用到SQLAlchemy進(jìn)行多主建設(shè)置的時(shí)候不要再被坑了 |
|