亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2099 | 回復(fù): 2
打印 上一主題 下一主題

吐槽一下SQLAlchemy的多主建添加報(bào)錯(cuò)問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-11-28 14:25 |只看該作者 |倒序?yàn)g覽
最近在用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í)候不要再被坑了

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2014-11-28 14:40 |只看該作者
lock_id = db.Column("lock_id", db.BIGINT, primary_key=True)這行也要加 autoincrement=False

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:01:44
3 [報(bào)告]
發(fā)表于 2014-11-29 14:29 |只看該作者
sqlalchemy很強(qiáng)大,也很復(fù)雜。而且文檔寫得不夠精煉全面。

sqlalchemy在定義關(guān)系列是,如果使用模型類作為參數(shù),則會(huì)引起循環(huán)導(dǎo)入,而使用字符串做參數(shù)時(shí),這個(gè)類型卻不能是模型類名,只能是表名。

這就造成,在sqlalchemy中,又有模型類名,又有字符串的表名,這不太優(yōu)雅。

按理說(shuō),ORM代碼中,只應(yīng)該出現(xiàn)模型類的名字,表名這樣的東西應(yīng)該是下一層,不應(yīng)該出現(xiàn)在代碼中的。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP