【问题标题】:Inserting into MySQL table using peewee raises "unknown column" exception使用 peewee 插入 MySQL 表会引发“未知列”异常
【发布时间】:2013-04-21 01:08:53
【问题描述】:

我有以下脚本:

from peewee import *

db = MySQLDatabase('database', user='root')

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

class Locations(BaseModel):
    location_id = PrimaryKeyField()
    location_name = CharField()

class Units(BaseModel):
    unit_id = PrimaryKeyField()
    unit_num = IntegerField()
    location_id = ForeignKeyField(Locations, related_name='units')

db.connect()

for location in Locations.select():
    for pod_num in range (1, 9):
        unit = Units.create(unit_num=pod_num, location_id=location.location_id)

表格位置的行数很少,表格单元为空。当我尝试启动它时,我不断收到异常:

(1054, "Unknown column 'location_id_id' in 'field list'")

我做错了什么?

这是创建表的部分 SQL 脚本:

CREATE  TABLE IF NOT EXISTS `database`.`units` (
  `unit_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `unit_num` TINYINT UNSIGNED NOT NULL ,
  `location_id` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`unit_id`) ,
  UNIQUE INDEX `ID_UNIQUE` (`unit_id` ASC) ,
  INDEX `location_idx` (`location_id` ASC) ,
  CONSTRAINT `location_id`
    FOREIGN KEY (`location_id` )
    REFERENCES `database`.`locations` (`location_id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

提前谢谢你!

【问题讨论】:

  • 创建表后是否更改了模型的字段?
  • 丹尼斯,不是我没有,我才刚开始学peewee,上面的代码几乎就是我的全部了。
  • 你是如何创建这个表的?
  • 上面有SQL脚本(我用的是Workbench,所以是EER模型->导出脚本->运行脚本)。刚刚发现将列 'location_id' 重命名为 'location' 解决了问题:)
  • 但我仍然想使用“location_id”名称(因为我不允许在生产数据库中更改其名称),所以问题仍然存在

标签: python mysql peewee


【解决方案1】:

如果要显式指定列,请使用db_column

class Units(BaseModel):
    unit_id = PrimaryKeyField()
    unit_num = IntegerField()
    location_id = ForeignKeyField(Locations, db_column='location_id', related_name='units')

记录在案:http://peewee.readthedocs.org/en/latest/peewee/models.html#field-types-table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2013-08-22
    • 2016-11-13
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多