ORMは、( リレーショナル・マッピング・オブジェクトリレーショナルマッピングオブジェクト)
Dは:オブジェクト指向のクラスワンアップデータベーステーブルを、プロジェクトデータベースDjangoの間のブリッジとしての 役割 E:クラスとオブジェクト、データベースのデータテーブルの操作によってCRUD他のSQL文の書き込みを必要とせずに操作、ORMで使用が容易に構成されていてもよい、異なるデータベース間のスイッチU:① 使用Djangoのデータベース開発手順: 1. models.pyモデルクラス(テーブルの生成を定義します小文字でモデルクラスの名前のアプリケーションの名前_)2.移行ファイルを生成する:パイソンmanage.D UH makemigrations Pyをdb.sqlite3):3.デフォルト、名前得られたデータベースによって(sqlite3のデータベースを使用してデータベーステーブルを生成するために移行を行うのpython manage.pyを移行4.インストールsqliteman:須藤はapt-getをsqlitemanをインストールし 、 起動します。sqlitemanは5.、データモデルクラスとオブジェクト変更の検索によって追加および削除、データベースのORMのCRUDスルーは:Pythonのmanage.pyシェル:コードが実行対話モードに入る作成クラス・オブジェクト・モデル:=モデルクラス()の増加/変化:a.save()-------- idが指定されていないデフォルト 最後ID、最初の時間は、指定されたIDと、IDが存在しない追加データ、IDデータ修正で、このようなID =なし、最後のID = ID + 1として、存在します
削除:a.delete()--------指定されていないIDのIDがこの中に削除される
フィールド属性(テーブルのフィールドに対応する、すなわち、データ):
属性名=モデルタイプフィールド(フィールド限界)---- -属性名はPythonと、二重下線のキーワードを使用することはできません
フィールドの種類を:
フィールドタイプ | タイプ意味 | 説明 |
オートフィールド | 自動増加整数フィールド | 通常は指定する必要はありません、Djangoは自動的に自動成長のid属性と呼ばれるプロパティを作成します。 |
BooleanField | ブールフィールド | TrueまたはFalseの値 |
NullBooleanField | ブールフィールド空 | ヌル、真、偽の三つの値をサポートしています。 |
CharFieldです | Stringフィールド | パラメータを指定する必要があります(MAX_LENGTH =文字の数) |
テキストフィールド | 大規模なテキストフィールド | 一般的に使用されたときに4000の以上の文字 |
DateFieldに、TimeField、DateTimeField型 | 日付、時刻、日付時刻フィールド | あなたはauto_now =偽(真:プロパティ値のために自動的にオブジェクト、ジャンゴを保存し、デフォルトはfalse)パラメータを指定することができます。auto_now_add(トゥルー:最初に作成し、自動的にプロパティ値についてDjangoは、デフォルトはfalse) |
IntegerFieldと | 整数フィールド | 値の範囲に-2147483648 2147483647は正当です |
DecimalFieldは | 10進浮動小数点 | あなたは、パラメータ(max_digit =合計桁数、decimal_places = 1小数点以下の桁)を指定する必要があります |
FloatField | フロート | フロートとPythonはエラーがある、示すために、 |
FileFieldに | アップロードファイルフィールド | |
ImageField | ピクチャフィールド | 有効なイメージを確実にするためにアップロードされたコンテンツを確認するために、FileFieldにから継承されます。 |
フィールドオプション(つまり、フィールドは、データテーブルを制限します):
オプション | デフォルト値 | 説明 | あなたがテーブル構造を変更し、再移行したいですか |
ヌル | 偽 | 真:データベースフィールドはnullを許可します | それはあります |
ユニーク | 偽 | 真:値は一意である必要があります | それはあります |
フィールドのdb_column | プロパティ名 | プロパティのフィールド名、指定されていない場合は、名前 | それはあります |
db_index | 偽 | 真:このフィールドのインデックスを作成します。ビューインデックス:テーブル名からショーのインデックス | それはあります |
PRIMARY_KEY | 偽 | 真:フィールドには、一般のAutoFieldを使用するオプションとして、プライマリキーフィールドのモデルになるだろう | それはあります |
デフォルト | フィールドのデフォルト値を設定します | ノー | |
ブランク | 偽 | 真:HTMLページのフォームの検証は、空のフィールドを許可する場合 | ノー |
ORMによってデータベースを照会:
オブジェクト(モデル管理)
D:各モデルのクラスは、クラス属性オブジェクトを有し、ジャンゴによって生成されたフィールド
E:データ処理操作のためのデータベースまたはデータを照会
U:オブジェクトの方法:
メソッドManagerオブジェクト | 戻り値の型 | 効果 |
モデルクラス.objects.get() | オブジェクトモデル | オブジェクト、そして一つだけを返します: あなたは、データの断片を発見した場合は、新聞:MultipleObjectsReturned データが報告されていない場合:。のDoesNotExist |
モデルクラス.objects.filter() | クエリセット | オブジェクトが条件を満たして返します。 |
モデルクラス.objects.all() | クエリセット | すべてのオブジェクトを返します。 |
モデルクラス.objects.exclude() | クエリセット | 条件付きオブジェクトの不満を返します。 |
モデルクラス.objects.order_by() | クエリセット | ソートする照会結果セット |
モデルクラス.objects.aggregate() | 辞書、例えば:{ 'salary__avg':9500.0} | 重合運転SUM、COUNT、MAX、MIN、平均 |
モデルクラス.objects.count() | デジタル | クエリ内のオブジェクトの数を返します。 |
filter方法
D:模型管理器objects的一种查询方法
E:实现条件查询,返回QuerySet对象,包含了所满足条件的数据
U:模型类.objects.filter(模型类属性名__条件名 = 值)
filter条件:
条件 | 含义 | 注释 |
exact | 判等 | 可以省略 |
contains; endswith; startswith | 模糊查询 | 包含; 以什么开头; 结尾 |
isnull | 空查询 | 是否为空,是返回True,否返回False |
in | 范围查询 | 在....内 |
gt,lt,gte,lte | 比较查询 | 大于,小于,大于等于,小于等于 |
year, date | 日期查询 | 年,日期 |
查询的其他方式
方法 | 作用 | 示例 |
F对象 | 引用某字段的值,对比表中的两个字段 | 查询语文分数大于数学分数的学生 成绩表.objects.filter(语文__gt=F('数学')) |
Q对象 | 组合多个查询条件,通过(&,|,~)进行逻辑操作 | Q(条件1)逻辑操作符 Q(条件2) |
order_by | 对查询结果进行排序(默认升序) | 升序: 模型类.objects.order_by('字段名') 降序: 模型类.objects.order_by('-字段名') |
aggregate | 聚合操作,对多行查询结果中的一列进行操作,返回一个值。(有Sum,Count,Max,Min,Avg) | 模型类.objects.aggregate(聚合类('模型属性')) 返回值是一个字典,格式: {'属性名__聚合函数': 值} |
count | 统计满足条件的对象的个数,返回值是一个数字 | 模型类.objects.count() |
查看orm语句
打开mysqld.cnf | sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf |
重启mysql服务 | sudo service mysql restart |
查看mysql日志内容 | sudo tail -f /var/log/mysql/mysql.log |
QuerySet查询集
D:调用模型管理器的all, filter, exclude, order_by方法会产生一个QuerySet
E:先过滤得到该查询集还可以调用objects的方法操作数据
U:①取下标操作(下标不允许负数):b[0]取出QuerySet的第一条数据,如果不存在则
抛异常
②切片操作(下标不允许负数):产生新的QuerySet
③get():取出QuerySet的唯一一条数据,不存在或者多条则抛异常
④exsit():判断是否有数据
⑤改,删数据库数据:QuerySet对象.update(属性1=值1),QuerySet.delete()
特性:①惰性查询:只有在使用QuerySet中的数据时,才会取查询数据库中的数据
②缓存:第一次遍历QuerySet中的所有对象,django会把数据缓存起来,第二次再使用时会使
用缓存,不会再次查询。
一对多关联查询
由一类的条件查询多类数据
1. 一类对象 = 一类类名.objects.get(条件)
一类对象.多类类名小写_set.all()
2. 多类类名.objects.filter(一类类名小写__一类属性名__条件 = 值)
由多类的条件查询一类数据
1. 多类对象 = 多类类名.objects.get(条件)
多类对象.关联属性
2. 一类类名.objects.filter(多类类名小写__多类属性名__条件 =值 )
自关联
D:是一种特殊的一对多关系
U:自关联关联属性定义:关联属性 = models.ForeignKey('self')
自定义模型管理器
D:在模型类中自定义模型管理器,自定义后,Django将不再生成默认的objects
E: 功能1:修改管理器返回的原始查询集
功能2:在管理器类中添加额外的方法,帮助我们操作模型类对应的数据表,减轻视
图函数中的代码量,主要做逻辑处理。
U:①在views创建一个自定义模型管理器类,继承Manager
②重写父类的方法修改管理器返回的原始查询集
③把操作数据库的代码实现封装到模型管理器的方法中,返回模型类对象
④在原模型类中:objects=自定义模型管理器类名() 实现功能1
⑤在视图函数中调用objects.③的方法名() 可实现功能2