同じコードスニペットの場合、SQLAlchemyはMac OXで外部キー制約を作成しますが、DebianLinuxでは外部キー制約を作成できません。
環境と図書館:
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 DBエンジンを選択し、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`)
ますか?
私のDebianPythonデプロイに何か問題がありますか?