有没有办法用Peewee追溯索引sql文件的列? (即初始规范没有编入索引的那个。)问,因为它应该更快地完成所有插入,然后索引,而不是相反。
答案 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)
答案 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
中的col2
和table_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))
但使用迁移器也是完全可以接受的。