使用Peewee创建具有相同结构的多个sql数据库

时间:2016-01-07 18:35:10

标签: python python-3.x peewee

我希望创建26个独立的sql数据库,每个数据库具有相同的结构。 (即字母表中每个字母一个),理想情况下我可以从字典或类似字母中访问[即使用a]访问与database["a"]字母对应的数据库。

我目前有以下代码,它使用peewee生成一个sql数据库(在本例中为字母a)。

from peewee import *
database_location_a = "C:\\database\\a.db"
data_sql_a= SqliteDatabase(database_location_a, threadlocals=True, pragmas=(("synchronous", "off"),))           

class BaseModel(Model):
    class Meta:
        database = data_sql_a

class main_table(BaseModel):
    file_name = CharField(primary_key = True)
    year = CharField()

data_sql_a.connect()    
data_sql_a.create_tables([main_table])

这部分代码我可以轻松地循环(例如,我可以轻松创建文件位置字典)。但是,我被困住的地方是,如果位置被编码到类Basemodel中,我该如何循环呢[即我需要26个单独的类,如果是这样,我可以创建它而无需复制/粘贴类26次]?同样,鉴于main_table使用BaseModel,我是否还需要该类的26个单独实例?

我可能会以错误的方式解决这个问题,但是想知道我可以采取什么方法来调整此代码以创建多个文件,而无需多次复制/粘贴它?

1 个答案:

答案 0 :(得分:2)

我能够使用peewee database proxy object获得正在运行的解决方案。

from peewee import *
database_proxy = Proxy()

class BaseModel(Model):
    class Meta:
        database = database_proxy  # Use proxy for our DB.

class main_table(BaseModel):
    file_name = CharField(primary_key = True)
    year = CharField()

import string
db_names = string.ascii_lowercase
# print(db_names) # abcdefghijklmnopqrstuvwxyz

'''
Loop over all the characters in the string and create databases in the current folder of this script
'''
for db_name in db_names:
    database = SqliteDatabase('{}.db'.format(db_name), threadlocals=True, pragmas=(("synchronous", "off"),))
    database_proxy.initialize(database)
    database_proxy.connect()
    database_proxy.create_tables([main_table])

根据Proxy documentation,您可以像调用database_proxy后的database对象一样使用database_proxy.initialize(database)变量。例如,connect()create_tables()实际上是通过databasedatabase_proxy上调用的。