繁体   English   中英

如何在Python中使用保留字的变量名

[英]How to use a variable name of reserved words in Python

当我在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中使用保留名称的变量。 谢谢!

通常,您可以使用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属性:

klass = CharField(max_length=45, column_name='class')
# or maybe, if you prefer:
class_ = CharField(max_length=45, column_name='class')

您应该将类​​属性命名为class_ (或非保留的名称),然后对Peewee字段使用column_name参数将其设置为“ class”。

不可能以这种方式使用保留字,但通常会添加下划线以避免诸如class_之类的冲突,因此您的代码将使用Class.class_甚至Class_.class_

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM