Python: 如何动态设置内部 class class 变量

Python: How to dynamically set inner class class variable

我正在一个项目中使用 peewee 和 SQLite。我有两个文件:

file1.py

if __name__ == '__main__':
    db = Thing()

file2.py

DB_FILENAME = 'db_name.db'
DB_FILE_PATH = f'/tmp/{DB_FILENAME}'
db = SqliteDatabase(DB_FILE_PATH)

class Thing(Model):
    field1 = CharField(primary_key=True)
    field2 = CharField()

    class Meta:
        database = db

Thing class 需要能够写入多个不同的数据库,因此我需要一种使 DB_FILENAME 可配置的简洁方法,以便初始化内部 class 数据库字段到适当的名称。

内部 Meta class 似乎是必需的,此设置是文档中引用的内容(全局声明的数据库)。 附加说明:此代码在 AWS Lambda 中 运行。

编辑:可行的解决方案实际上不起作用。

编写一个创建 class 的函数,并使用环境变量作为参数调用它。

# file2.py

def make_model(db_file_name):
    class Thing(Model):
        field1 = CharField(primary_key=True)
        field2 = CharField()

        class Meta:
            database = SqliteDatabase(f'/tmp/{db_file_name}')

    return Thing


# script

from file2 import make_model

if __name__ == '__main__':
    db = make_model(f'db_name_{os.getenv("SUFFIX")}.db')

文档涵盖了以下内容:http://docs.peewee-orm.com/en/latest/peewee/database.html#run-time-database-configuration

database = PostgresqlDatabase(None)  # Un-initialized database.

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

....

database_name = input('What is the name of the db? ')
database.init(database_name, host='localhost', user='postgres')