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')
我正在一个项目中使用 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')