【问题标题】:Creating multiple sql databases of the same structure using Peewee使用Peewee创建多个相同结构的sql数据库
【发布时间】:2016-01-07 18:35:10
【问题描述】:

我希望创建 26 个独立的 sql 数据库,每个数据库都具有相同的结构。 (即每个字母一个),理想情况下我可以从字典或类似的[即使用database["a"] ] 访问与字母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 个单独实例?

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

【问题讨论】:

  • 您不能在BaseModel 中为数据库对象添加参数吗?
  • @cricket_007 你能否详细说明一下 - 我可能应该注意到我以前没有在 Python 中使用过很多类,所以我怀疑有一个非常简单的解决方案。
  • 没关系,我不知道 peewee。我想你想要的是database proxy

标签: python python-3.x peewee


【解决方案1】:

我能够使用 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.initialize(database) 后,您可以像通常对database 对象一样使用该database_proxy 变量。例如,connect()create_tables() 实际上是在 databasedatabase_proxy 上调用的。

【讨论】:

    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多