2015-11-08 42 views
2

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

对于具有2列,ID一个名称一个表,其结果将是

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') 

有另一种可能性,这个问题,因为我不想做的手动更改前夕rytime我从数据库服务器下载模型?

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

问候,

吕克

回答

1

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

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

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