Основные операции Джанго MySQL

модель Django (база данных)

Django модель связана с базой данных, базы данных код , связанный обычно записывается models.pyв, Django поддерживает sqlite3, PostgreSQL, MySQL, SQLite, Oracle. И другие базы данных, используя соответствующую базу данных необходимо настроить в settings.py может не изменить код models.py богатых значительно облегчает использование API только.

MySQL является наиболее широко используемым веб-приложений для баз данных MySQL, и последующего использования вводятся, если не установлен драйвер MySQL, можно выполнить следующую команду, чтобы установить:

pip install mysqlclient

Конфигурация базы данных

Настройка MySQL нужно только проецировать папку , settings.pyчтобы найти файл конфигурации изделия БАЗ, его информация изменяется следующим образом :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'user',
        'USER': 'root',
        'PASSWORD': 'mysql',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}

Вышеуказанные переменные должны быть в верхнем регистре, которые соответствуют одной и той же базе данных MySQL и пользовательских настроек. Джанго в описании, подключенный к соответствующей базе данных MySQL и пользователя.

В Django является использование базы данных по умолчанию MySQLDb модуль подключен, на этот раз , чтобы использовать pymysql модуль для замены библиотеки MySQLDb соединений, есть два пути:
один путь: Во имя папки проекта ниже __ __ INIT .py
образом: в папка приложения приложение ниже __ __ INIT .py

Фиксированное письмо:


import pymysql
pymysql.install_as_MySQLdb()  # 告诉django用pymysql代替mysqldb连接数据库

Создание модели

Для использования модели необходимо создать приложение приложение, вы можете создать хорошее приложение после models.py определить модель в папке приложения.

from django.db import models
class User(models.Model):
    # user表的主键字段名就是id,id字段可以不写默认会帮你创建一个主键id字段
    id = models.AutoField(primary_key=True)
    # varchar(32) name字段是varchar(32)   CharField在定义的时候必须要加max_length参数
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=16)

    def __str__(self):
        return self.name

Выше, представляет собой имя класса таблицы в базе данных, и наследственное models.Model, свойство класса, представляющее поля таблицы данных (имя), типа там данные, как CharField (соответствующего переменный), DateField (эквивалент DateTime ), параметры MAX_LENGTH определенной длины.

Общие типы полей

Ниже перечислены некоторые из наиболее распространенных типов полей.

  • CharField: используется для определения кратко- строки средней длины поля. Max_length необходимо указать данные, которые будут сохранены.
  • TextField: большая строка произвольной длины. Max_length вы можете указать поле для поля, но только тогда, когда поле отображается в форме, будет использоваться (не соблюдается на уровне базы данных).
  • IntegerField: это поле для хранения целого числа (целое) значений, используемое для проверки целочисленного значения, введенное в форме.
  • DateField и DateTimeField: для хранения / представляет собой дату и информацию о дате / времени (соответственно Python.datetime.date этих полей и объектов datetime.datetime не указано иное (взаимоисключающих) параметры auto_now = TŪRE (каждый раз, когда модель сохраняется. поле устанавливается на текущую дату), auto_now_add (установить только дату) и значение по умолчанию (установить дату по умолчанию, может быть покрыто пользователем), когда модель была впервые создана.
  • EmailField: используется для хранения и подтвердить свой адрес электронной почты.
  • FileField и ImageField: используются для загрузки файлов и изображений (ImageField просто добавить загруженный файл является дополнительной проверкой изображения). Эти параметры используются для определения, где и как хранить загруженный файл.
  • AutoField: это особый тип автоинкрементным IntegerField. Если вы явно не указать первичный ключ, первичный ключ этого типа будет автоматически добавлен к модели.
  • ForeignKey: для многих отношений с другой назначенной моделью базы данных (например, производитель автомобилей, производитель может сделать много автомобилей). «А» сторона содержит ключевую модель отношений.
  • ManyToManyField: используются для определения многих отношений (например, книга может иметь несколько типов, каждый из которых может содержать несколько книг). В нашей библиотеке приложения, мы будем очень похожи использовать их ForeignKeys, но вы можете использовать более сложный способ для описания отношений между группами. Эти параметры имеют определенную ассоциацию on_delete записи, что происходит (например, значение models.SET_NULL будет просто установить на значение NULL) удаляются.

Создание таблицы данных

Следующая модель была построена , чтобы создать синхронизацию базы данных , чтобы сформировать структуру таблицы. Первый компакт - диск в manage.pyпапку , в которой, введите следующую команду:

python manage.py makemigrations  # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate  # 创建表结构,将你的数据模型变动正在同步到数据库中

Для того, чтобы обеспечить функционирование указанных выше регистрация настроек приложений приложение было зарегистрировано в.

Работа с базой данных

Добавление данных

Добавить функция добавляет папку данных views.py приложение приложения для работы с базой данных. Добавление данных в следующих случаях:

方式一:通过create函数进行直接进行添加
user_obj = models.User.objects.create(name='linwow',password='123')
方式二:通过对象调用save()来添加
user_obj = models.User(name='linwow',password='123')
user_obj.save()  # 对象调用save方法保存到数据库
方式三:
user_obj = models.User()
user_obj.name = 'linwow'
user_obj.password = '123'
user_obj.save()
方式四:首先尝试获取,不存在就创建,可以防止重复
models.User.objects.get_or_create(name='linwow', password='123')
# 返回的是一个元组,(object, True/False),创建时返回 True, 已经存在时返回 False
  • Когда есть много, много к одному, или многим ко многим отношений, объекты, связанные запросы гасить
user_obj = models.User.objects.get(pk=1)
class_obj = models.Class.objects.get(name="python")
user_obj.cla_id = class_obj
user_obj.save()

Получить данные

Django предоставляет несколько способов, чтобы получить содержимое запроса к базе данных из базы данных, как правило, является результатом коллекции, этот набор называется QuerySet. Обратите внимание, что данные запроса, чтобы вы в конце концов, это объект данных или QuerySet

  • все (): получить все строки данных через все объекты модели менеджера (), что эквивалентно SELECT * FROM пользователя SQL в
user_list = models.User.objects.all()  # 获取user表所有的数据
这样获取到的是QuerySet对象,只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句
print(user_list.query) 
  • фильтр (): соответствует фильтру в SQL WHERE, могут быть предусмотрены условия, результаты фильтрации, когда фильтр случае отсутствия пустого возвращать объекты QuerySet
user_list = models.User.objects.filter(id=1) # 获取user表中id为1的数据
queryset对象支持索引取值 但是不推荐你使用  推荐使用自带的.first()获取第一条数据
user_query = models.User.objects.filter(name=linwow).first()
  • получить (): Получить один объект может получить непосредственно к данным, полученным от самого объекта, но в случае отсутствия прямого запроса данного
user_list = models.User.objects.get(id=1) # 如果数据不存在会报错,一般不推荐使用

Методы получения данных:

获取所有数据:
models.User.objects.all()
切片操作,获取10个人,不支持负索引,切片可以节约内存:
models.User.objects.all()[:10] 
获取对应条件的值,get是用来获取一个对象的:
models.User.objects.get(name=name)
获取满足条件的一些人,就要用到filter:
models.User.objects.filter(name="abc")  # 等于models.User.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
models.User.objects.filter(name__iexact="abc")
名称中包含 "abc"的人:
models.User.objects.filter(name__contains="abc")
名称中包含 "abc",且abc不区分大小写:
models.User.objects.filter(name__icontains="abc")

正则表达式查询:
models.User.objects.filter(name__regex="^abc")
正则表达式不区分大小写:
models.User.objects.filter(name__iregex="^abc")

排除包含wow的User对象:
models.User.objects.exclude(name__contains="wow")
找出名称含有abc, 但是排除年龄是23岁的
models.User.objects.filter(name__contains="abc").exclude(age=23)

1、如果只是检查User中是否有对象,应该用 user_list = models.User.objects.all().exists()
2、用 len(user_list) 可以得到User的数量,但是推荐用 models.User.objects.count()来查询数量。
3list(user_list) 可以强行将 QuerySet 变成列表。
4、 去重方法user_list = user_list.distinct()

Перенести исключить ненужные поля

В сложных случаях, таблица может быть некоторыми содержимым полей очень много, вынимает превращение в объектах Python занимает много ресурсов, которые могут быть использованы при Defer исключить эти поля.

models.User.objects.all().defer('addr')

только нужно выбрать только поля

И отложить наоборот, нужно только поле удалено, если нужно только найти имя пользователя.

models.User.objects.all().only('addr')

обновлять данные

Может быть использовано для изменения данных сохранения () или обновления (), за исключением () метод используется и новые данные совпадают, Далее описано, как обновление.

  • Групповое обновление для .Вса () .filter () .exclude () и так далее сзади.
  • Обновление одного объекта, выполненный с возможностью .get (), get_or_create (), update_or_create (), как OBJ получается.
models.User.objects.filter(id=1).update(name='lin',password='321')

Удалить данные

Удаление объектов в базе данных просто вызовите метод объекта удаления () может быть

  • Удалить идентификатор данных = 1
user_obj = models.User.objects.get(id=1)
test1.delete()
或者
models.User.objects.filter(id=1).delete()
  • Удалить все данные
models.User.objects.all().delete()

Сортировка данных

В приложении Django, если вы хотите, чтобы результаты отсортированных по значению поля поиска, например, в алфавитном порядке. Затем, используя order_by () Этот метод на нем.

  • Вы можете сортировать поле:
models.User.objects.all().order_by('name')
  • Если необходимо отсортировать множество стандартных полей (второе поля, которые будут использоваться в том же значении первого поля), может быть использовано множество параметров:
models.User.objects.all().order_by('name','id')
  • Вы можете указать обратный порядок, которому предшествует минус (-) префикс:
models.User.objects.all().order_by('-name')

рекомендация

отblog.csdn.net/linwow/article/details/91351022