[Django+WeChatウィジェット開発]09 Djangoデータベース移行とテーブル構造移行
2943 ワード
バックアップデータベース(バックアップappデータベース)python manage.py dumpdata authorization > authorization_data.jsonはデータベース構造をslave(DB間移行)python manageに同期する.py migrate--run-syncdb--database slave同期データをmysqlデータベース(インポートデータ)python manage.py loaddata authorization_data.json
DjangoでORMがインデックスを使用すると、検索速度が速くなります.下位はB+ツリーがORMにインデックスを追加する2つの方法です.
class Meta:indexes=[models.Index(fields=[‘nikename’])#独立インデックスmodels.Index(fields=[‘nikename’,‘open_id’)#コンビネーションインデックス]
Djangoのデフォルトのインデックスルール:プライマリ・キーは必ずインデックスの外部キーがデフォルトのインデックスである(インデックスでなくてもよい)
Djangoモデル層-関係マッピング三種類の関係マッピング一対一の関係一対多の関係(多対一)多対多の関係
Djangoでのリレーションシップマッピング一対一:OneToOneField一対多:外部キー(Foreignkey)多対多:ManyToManyField 1クラスに追加するだけ
ORMにおける一括追加データdef add_batch(): new_user_list = [] for i in range(10): open_id = ranstr(32) nike_name = ranstr(32) user = UserProfile(open_id = open_id,nikename=nike_name) new_user_list.append(user) UserProfile.object.bulk_creat(new_user_lsit)
getとfilterの違い:getは単一のデータを取得し、filterが返すリストの一括検索userobjectをエラーと報告できない.filter(open_id_contains="123")一括削除user.objec.filter(open_id_contains=“test_”).delete()はuserをすべて削除します.objecr.all().delete()
一括変更user.object.filter(opne_id_contains=“test_”).updata(nikename = “muuu”)
データベース関数:文字列結合:Concat from django.db.model.functions import Concat def concat_function(): user
よく使用されるデータベース関数のクエリー」
in,pkは豚の輪を調べることに相当する
gtより大きい
SQL等価:
gteが大きいか等しいか.
ltが少ない.
lteが小さいか等しいか.
startswith
大文字と小文字を区別する先頭は.
例:
SQL等価:
SQLiteでは、大文字と小文字を区別する
istartswith
大文字と小文字を区別しない先頭は.
例:
SQL等価:
endswith
大文字と小文字を区別する.
例:
SQL等価:
iendswith
大文字と小文字を区別しない末尾は.
例:
SQL等価:
範囲テスト(含む).
例:
SQL等価:
DjangoでORMがインデックスを使用すると、検索速度が速くなります.下位はB+ツリーがORMにインデックスを追加する2つの方法です.
1: db_index=True
2: Meta :
class Meta:indexes=[models.Index(fields=[‘nikename’])#独立インデックスmodels.Index(fields=[‘nikename’,‘open_id’)#コンビネーションインデックス]
Djangoのデフォルトのインデックスルール:プライマリ・キーは必ずインデックスの外部キーがデフォルトのインデックスである(インデックスでなくてもよい)
Djangoモデル層-関係マッピング三種類の関係マッピング一対一の関係一対多の関係(多対一)多対多の関係
Djangoでのリレーションシップマッピング一対一:OneToOneField一対多:外部キー(Foreignkey)多対多:ManyToManyField 1クラスに追加するだけ
ORMにおける一括追加データdef add_batch(): new_user_list = [] for i in range(10): open_id = ranstr(32) nike_name = ranstr(32) user = UserProfile(open_id = open_id,nikename=nike_name) new_user_list.append(user) UserProfile.object.bulk_creat(new_user_lsit)
getとfilterの違い:getは単一のデータを取得し、filterが返すリストの一括検索userobjectをエラーと報告できない.filter(open_id_contains="123")一括削除user.objec.filter(open_id_contains=“test_”).delete()はuserをすべて削除します.objecr.all().delete()
一括変更user.object.filter(opne_id_contains=“test_”).updata(nikename = “muuu”)
データベース関数:文字列結合:Concat from django.db.model.functions import Concat def concat_function(): user
よく使用されるデータベース関数のクエリー」
in,pkは豚の輪を調べることに相当する
gtより大きい
Entry.objects.filter(id__gt=4)
SQL等価:
SELECT ... WHERE id > 4;
gteが大きいか等しいか.
ltが少ない.
lteが小さいか等しいか.
startswith
大文字と小文字を区別する先頭は.
例:
Entry.objects.filter(headline__startswith='Lennon')
SQL等価:
SELECT ... WHERE headline LIKE 'Lennon%';
SQLiteでは、大文字と小文字を区別する
LIKE
文はサポートされていません.startswith
はistartswith
SQLiteのようです.istartswith
大文字と小文字を区別しない先頭は.
例:
Entry.objects.filter(headline__istartswith='Lennon')
SQL等価:
SELECT ... WHERE headline ILIKE 'Lennon%';
endswith
大文字と小文字を区別する.
例:
Entry.objects.filter(headline__endswith='Lennon')
SQL等価:
SELECT ... WHERE headline LIKE '%Lennon';
iendswith
大文字と小文字を区別しない末尾は.
例:
Entry.objects.filter(headline__iendswith='Lennon')
SQL等価:
SELECT ... WHERE headline ILIKE '%Lennon'
range
¶ 範囲テスト(含む).
例:
import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
SQL等価:
SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';