当我在python中使用peewee来获取名为“ class”的列数据时遇到了问题。但是“类”是一个保留字,当我运行代码时,它总是以“ SyntaxError:无效语法”停止。
如果不包含Class.class列,这是我正在使用的代码。
query = (
Student.select(
Student.id,
Student.name,
Student.school_id,
School.name,
Student.class_id,
Class.class,
Class.grade,
)
.join(Class, join_type=pw.JOIN.INNER, on=(Class.id == Student.class_id))
.join(School, join_type=pw.JOIN.INNER, on=(School.id == Student.school_id))
.where(Student.id == id)
)
以及Class.class的定义也将导致相同的错误:
class = CharField(max_length=45)
它应该给我一个没有错误的查询。所以我的问题是如何在python中使用保留名称的变量。谢谢!
答案 0 :(得分:5)
通常,您可以使用getattr
访问保留关键字的名称; class
属性:
query = (
Student.select(
Student.id,
Student.name,
Student.school_id,
School.name,
Student.class_id,
getattr(Class, 'class'), # equivalent to `Class.class` (if that were allowed)
Class.grade,
)
.join(Class, join_type=pw.JOIN.INNER, on=(Class.id == Student.class_id))
.join(School, join_type=pw.JOIN.INNER, on=(School.id == Student.school_id))
.where(Student.id == id)
)
但是,您可能希望将Peewee表定义中的属性重命名为非保留字,并使用column_name='class'
使其仍然引用物理表中的class
属性:< / p>
klass = CharField(max_length=45, column_name='class')
# or maybe, if you prefer:
class_ = CharField(max_length=45, column_name='class')
答案 1 :(得分:1)
您应该将类属性命名为class_
(或非保留的名称),然后将column_name
参数用于Peewee字段以将其设置为“ class”。
答案 2 :(得分:0)
不可能以这种方式使用保留字,但是通常会添加下划线以避免类_之类的冲突,因此您的代码将使用Class.class_甚至Class_.class _