對於相同的代碼片段,SQLAlchemy會在Mac OX上創建外鍵約束,但是它無法在Debian Linux上創建外鍵約束。SQLAlchemy不在MySQL上創建外鍵[Debian Linux]
環境&庫:
的Python 2.7
SQLAlchemy的0.7.8
的MySQL中的python-1.2.3 [這是連接器,而我懷疑什麼是錯在這裏]
代碼段:
class PRStatusCV(globalBase):
__tablename__ = 'pr_status_cv'
pr_status_cv_id = Column(Integer, primary_key=True)
name = Column(VARCHAR(100), nullable=False, unique=True)
def __init__(self, id, name, desc):
self.pr_status_cv_id = id
self.name = name
self.description = desc
class PhysicalRun(globalBase):
__tablename__ = 'prs'
pr_id = Column(Integer, primary_key=True)
run_name = Column(VARCHAR(200), nullable=False, unique=True)
pr_status_cv_id = Column(Integer, ForeignKey('pr_status_cv.pr_status_cv_id'))
def __init__(self, name, status):
self.run_name = name
self.pr_status_cv_id = status
在Debian的Linux中,創建該表包含:
CREATE TABLE `prs` (
`pr_id` int(11) NOT NULL AUTO_INCREMENT,
`run_name` varchar(200) NOT NULL,
`pr_status_cv_id` int(11) DEFAULT NULL,
PRIMARY KEY (`pr_id`),
UNIQUE KEY `run_name` (`run_name`),
KEY `pr_status_cv_id` (`pr_status_cv_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
在Mac OSX的表中創建看起來像這樣:
CREATE TABLE `prs` (
`pr_id` int(11) NOT NULL AUTO_INCREMENT,
`run_name` varchar(200) NOT NULL,
`pr_status_cv_id` int(11) DEFAULT NULL,
PRIMARY KEY (`pr_id`),
UNIQUE KEY `run_name` (`run_name`),
KEY `pr_status_cv_id` (`pr_status_cv_id`),
CONSTRAINT `prs_ibfk_1` FOREIGN KEY (`pr_status_cv_id`) REFERENCES `pr_status_cv` (`pr_status_cv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
觀察: 好像爲Mac OSX默認情況下,SQLAlchemy選擇了InnoDB數據庫引擎,並且爲Debian選擇了MyISAM。任何想法爲什麼會這樣發生?
需要做些什麼修改才能產生約束 - CONSTRAINT `prs_ibfk_1` FOREIGN KEY (`pr_status_cv_id`) REFERENCES `pr_status_cv`
,而不僅僅是KEY `pr_status_cv_id` (`pr_status_cv_id`)
?
我的Debian Python部署有什麼不正確?
修復代碼片段,它們不可讀。 – glyphobet 2012-07-16 20:48:24
MyIsam沒有限制,因此您需要修復引擎問題,以便解決關鍵問題 – 2012-07-16 20:52:16
+1作爲對他人的警告。 – SingleNegationElimination 2012-07-16 21:01:15