如何在Python中使用保留字的变量名
How to use a variable name of reserved words in Python
我在 python 中使用 peewee 获取名为 'class' 的列的数据时遇到了问题。但是 'class' 是一个保留字,当我 运行 代码时它总是以 'SyntaxError: invalid syntax'.
停止
这是我正在使用的代码,如果我不包含 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 中保留名称的变量。谢谢!
一般情况下,您可以使用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 table 定义中的属性重命名为非保留字的名称,并使用 column_name='class'
使其仍然引用 class
属性在身体上 table:
klass = CharField(max_length=45, column_name='class')
# or maybe, if you prefer:
class_ = CharField(max_length=45, column_name='class')
您应该将 class 属性命名为 class_
(或非保留名称),然后使用 Peewee 字段的 column_name
参数将其设置为 "class."
不可能以这种方式使用保留字,但通常添加下划线以避免冲突,例如 class_,因此您的代码将使用 Class.class_ 甚至 Class_.class_
我在 python 中使用 peewee 获取名为 'class' 的列的数据时遇到了问题。但是 'class' 是一个保留字,当我 运行 代码时它总是以 'SyntaxError: invalid syntax'.
停止这是我正在使用的代码,如果我不包含 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 中保留名称的变量。谢谢!
一般情况下,您可以使用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 table 定义中的属性重命名为非保留字的名称,并使用 column_name='class'
使其仍然引用 class
属性在身体上 table:
klass = CharField(max_length=45, column_name='class')
# or maybe, if you prefer:
class_ = CharField(max_length=45, column_name='class')
您应该将 class 属性命名为 class_
(或非保留名称),然后使用 Peewee 字段的 column_name
参数将其设置为 "class."
不可能以这种方式使用保留字,但通常添加下划线以避免冲突,例如 class_,因此您的代码将使用 Class.class_ 甚至 Class_.class_