列名

时间:2015-11-08 10:48:43

标签: peewee

我必须使用包含名称中包含短划线的列的数据库,例如 a-name 。当用peewee转换表时,它将它转换为非法字符,python抱怨错误的操作符。

对于包含2列 id a-name 的表格,结果将是

from peewee import *

database = MySQLDatabase('databasename', **{'password': 'pwd', 'host': 'ip', 'user': 'username'})

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

class ATable(BaseModel):
    id = PrimaryKeyField()
    a-name = CharField()

    class Meta:
        db_table = 'aTable'

我找到了一个临时解决方法,将短划线更改为下划线并使用可选参数 db_column ,例如

a_name = CharField(db_column='a-name')

这个问题是否有另一种可能性,因为我不想每次从数据库服务器下载模型时都进行手动更改?

我应该补充一点,我无法控制数据库服务器,我只有一个具有只读权限的帐户。

问候,

吕克

1 个答案:

答案 0 :(得分:1)

a_name = CharField(db_column='a-name')

这是解决问题的正确方法。 Python不允许在标识符中使用破折号,因此如果您的列使用它们,那么请明确指定列名并为该列使用一个漂亮的名称。

我想你也可以考虑修改playhouse.reflection.Introspector.make_column_name方法。