我必须使用包含名称中包含短划线的列的数据库,例如 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')
这个问题是否有另一种可能性,因为我不想每次从数据库服务器下载模型时都进行手动更改?
我应该补充一点,我无法控制数据库服务器,我只有一个具有只读权限的帐户。
问候,
吕克
答案 0 :(得分:1)
a_name = CharField(db_column='a-name')
这是解决问题的正确方法。 Python不允许在标识符中使用破折号,因此如果您的列使用它们,那么请明确指定列名并为该列使用一个漂亮的名称。
我想你也可以考虑修改playhouse.reflection.Introspector.make_column_name
方法。