用Peewee追溯创建索引?

时间:2016-09-17 17:18:31

标签: python peewee

有没有办法用Peewee追溯索引sql文件的列? (即初始规范没有编入索引的那个。)问,因为它应该更快地完成所有插入,然后索引,而不是相反。

3 个答案:

答案 0 :(得分:3)

  

有没有办法用Peewee追溯索引sql文件的列?

是。 Pewee's SchemaMigrator课程包括对adding an index的支持:

  

add_index (table,columns [,unique = False])

     

table (str) - 要创建索引的表的名称    columns (list) - 应该索引的列的列表.unique
   unique (bool) - 新索引是否应指定唯一约束。

如果您使用带有pewee_migrate package的Pewee,则可以创建数据库迁移,以便在已存在的表上添加索引,如下所示:

unique_index = False

def migrate(migrator, database, fake=False, **kwargs):
    migrator.create_index('some_table', ('name_of_indexed_column',), unique_index)

def rollback(migrator, database, fake=False, **kwargs):
    migrator.drop_index('some_table', ('name_of_indexed_column',), unique_index)

然后run the migration

答案 1 :(得分:1)

我想展示一个使用add_index的完整示例(在另一个答案中由@doremi引用):

from peewee import SqliteDatabase
from playhouse.migrate import SqliteMigrator, migrate

db = SqliteDatabase('db.sqlite3')
migrator = SqliteMigrator(db)

migrate(
    # Create a unique, multi-column index
    migrator.add_index('table_name', ('col1', 'col2'), True),
)

请注意,这是一个独特的多列索引(我在col1中的col2table_name列中为唯一值添加索引。调整上面的代码,使其符合您的需求!

Supported Operations”下提供了文档。向下滚动一下,找到“添加索引”的示例。

答案 2 :(得分:1)

如果使用Peewee 3.x,您也可以:

db = SqliteDatabase(':memory:')

class Note(Model):
    content = TextField()
    timestamp = TimestampField()
    status = IntegerField()

    class Meta:
        database = db

User.create_table()
idx = Note.index('timestamp', 'status').where(Note.status == 1)
db.execute(User._schema._create_index(idx))

但使用迁移器也是完全可以接受的。