Python peewee外键约束错误形成

时间:2018-02-13 12:56:52

标签: python mysql peewee


我目前正在使用peewee连接到MySQLDatabase的python项目。
如果我想使用创建表 database.create_tables(tables=[])(create_table不起作用)
我从记录器中收到以下错误消息:

  

错误会话[5924] :( 1005,&#39;不能创建表example_database.example_table(错误号:150&#34;外键约束形成错误&#34;)&#39;)< / p>

example_table指定为:

class Example_Table(BaseModel):
    id = PrimaryKeyField()
    example_table2 = ForeignKeyField(Modul)
    class Meta:
        db_table = 'Example_Table'

BaseModel定义如下:

class BaseModel(Model):
    class Meta:
        database = database

和数据库是我的MySQLDatabase对象。
问题是,为什么外键约束不起作用以及为什么表都以小写形式保存,但我用大写字母定义了它们

如果我再次运行程序,它会创建表,但会给我一个重复的key_name错误

版本:peewee == 3.0.17

1 个答案:

答案 0 :(得分:2)

因此,在peewee 3.x中,您使用db_table而不是class User(Model): username = TextField() class Meta: database = db table_name = 'UserTbl' class Note(Model): user = ForeignKeyField(User, backref='notes') content = TextField() class Meta: database = db table_name = 'NoteTbl' 来显式声明非默认表名。

我在本地运行了一些示例代码来进行测试:

CREATE TABLE IF NOT EXISTS `UserTbl` (`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY, `username` TEXT NOT NULL)
CREATE TABLE IF NOT EXISTS `NoteTbl` (`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY, `user_id` INTEGER NOT NULL, `content` TEXT NOT NULL, FOREIGN KEY (`user_id`) REFERENCES `UserTbl` (`id`))
CREATE INDEX `note_user_id` ON `NoteTbl` (`user_id`)

我创建了表并检查了SQL输出,这对我来说是正确的:

{{1}}

希望有所帮助。