peewee 未在 select 语句中使用动态 table 名称

peewee not using dynamic table name in select statement

为什么这里的select语句有t1而不是MyDynamicTable

from peewee import *

database = SqliteDatabase(None)


class Base(Model):
    class Meta:
        database = database


class MyTable(Base):
    FieldA = TextField()
    FieldB = TextField()


mytable = type('MyDynamicTable', (MyTable,), {})

database.init('test.db')

mytable.select()

导致:

>>> mytable.select()
<class 'peewee.MyDynamicTable'> SELECT "t1"."id", "t1"."FieldA", "t1"."FieldB" FROM "mydynamictable" AS t1 []

但是名字是正确的:

>>> mytable
<class 'peewee.MyDynamicTable'>
>>> mytable._meta.db_table
'mydynamictable'

Peewee 为您的 table 取了别名。如果您阅读了完整的查询:

SELECT "t1"."id", "t1"."FieldA", "t1"."FieldB"
FROM "mydynamictable" AS t1

"mydynamictable" AS t1 部分将 table 名称别名为 "t1",以使查询更紧凑。当您有联接并需要消除同名列的歧义时,这一点尤其重要。