2016-09-17 2 views
3

PeeweeでSQLファイルの列を遡及的に索引付けする方法はありますか? (つまり、最初の指定がインデックスされていない場所)挿入をすべて実行してからインデックスを作成する方が速いはずです。Peeweeで索引を遡及的に作成しますか?

答えて

2

遡及してSQLファイルの列をPeeweeにインデックスする方法はありますか?

はい。 - インデックスを作成するテーブルの名前

ADD_INDEX(テーブル、列[、ユニーク= FALSE])

テーブル(STR):Pewee'sSchemaMigratorクラスはadding an indexのためのサポートを含みます。
(リスト) - ユニーク(ブール値)
indexed.uniqueあるべき列のリスト - 新しいインデックスがユニーク制約を指定する必要があるかどうか。

あなたはpewee_migrate packageでペウィーを使用している場合、あなたはまだのように存在しているテーブルにインデックスを追加するためのデータベースの移行を作成することができます。

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

私は(他の回答で@doremiによって参照)add_indexを使用しての完全な例を示したかった:これはユニークなマルチカラムインデックスであることを

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), 
) 

注意(私はのためにインデックスを追加しています両方の列のユニークな値col1col2table_nameです)。あなたのニーズに合うように上記のコードを調整してください!

ドキュメントは「」の下にあります。少し下にスクロールして、「インデックスを追加する」の例を見つけてください。

0

あなたはピーウィー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)) 

しかし、マイグレーを使用しても全く構いません。

関連する問題