对于相同的代码片段,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