Архив метки: Python

Как работать с CSV-файлами в Python

В этой статье будет рассмотрено руководство по работе с файлами «csv» с помощью Python. Термин «csv» означает «значения, разделенные запятыми», где каждая строка или строка содержат текстовые значения, разделенные запятыми. В некоторых случаях для разделения значений вместо запятой также используется «точка с запятой». Однако это не имеет большого значения для правил формата файлов, и логика обработки обоих типов разделителей остается той же.

Формат файла CSV обычно используется для обслуживания баз данных и электронных таблиц. Первая строка в CSV-файле чаще всего используется для определения полей столбцов, а все остальные оставшиеся строки считаются строками. Эта структура позволяет пользователям представлять табличные данные с помощью файлов CSV. Файлы CSV можно редактировать в любом текстовом редакторе. Однако такие приложения, как LibreOffice Calc, предоставляют расширенные инструменты редактирования, сортировки и фильтрации.

 

Чтение данных из файлов CSV с помощью Python

Модуль CSV в Python позволяет вам читать, записывать и управлять любыми данными, хранящимися в файлах CSV. Чтобы прочитать файл CSV, вам нужно будет использовать метод «reader» из модуля Python «csv», который включен в стандартную библиотеку Python.

Учтите, что у вас есть файл CSV, содержащий следующие данные:

Mango,Banana,Apple,Orange

50,70,30,90

 

Первая строка файла определяет категорию каждого столбца, в данном случае название фруктов. Во второй строке хранятся значения в каждом столбце (на складе). Все эти значения разделяются запятой. Если бы вы открыли этот файл в приложении для работы с электронными таблицами, таком как LibreOffice Calc, он бы выглядел так:

Как работать с CSV-файлами в Python

 

Теперь, чтобы прочитать значения из файла «fruit.csv» с помощью модуля Python «csv», вам нужно будет использовать метод «reader» в следующем формате:

import csv

with open("fruits.csv") as file:

data_reader = csv.reader(file)

for line in data_reader:

print (line)

 

Первая строка в приведенном выше примере импортирует модуль «csv». Затем оператор «with open» используется для безопасного открытия файла, хранящегося на вашем жестком диске (в данном случае «fruit.csv»). Новый объект «data_reader» создается путем вызова метода «reader» из модуля «csv». Этот метод «читателя» принимает имя файла в качестве обязательного аргумента, поэтому ему передается ссылка на «fruit.csv». Затем выполняется оператор цикла for для печати каждой строки из файла «fruit.csv». После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:

['50', '70', '30', '90']

 

Если вы хотите назначить номера строк для вывода, вы можете использовать функцию «перечислить», которая присваивает номер каждому элементу в итерации (начиная с 0, если не было изменено).

import csv

with open("fruits.csv") as file:

data_reader = csv.reader(file)

for index, line in enumerate(data_reader):

print (index, line)

 

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

0 ['Mango', 'Banana', 'Apple', 'Orange']

1 ['50', '70', '30', '90']

 

Поскольку первая строка в файле «csv» обычно содержит заголовки столбцов, вы можете использовать функцию «перечислить» для извлечения этих заголовков:

import csv

with open("fruits.csv") as file:

data_reader = csv.reader(file)

for index, line in enumerate(data_reader):

if index == 0:

headings = line

print (headings)

 

Блок «if» в приведенном выше утверждении проверяет, равен ли индекс нулю (первая строка в файле «fruit.csv»). Если да, то значение переменной «строка» присваивается новой переменной «заголовки». После выполнения приведенного выше примера кода вы должны получить следующий результат:

['Mango', 'Banana', 'Apple', 'Orange']

 

Обратите внимание, что вы можете использовать свой собственный разделитель при вызове метода csv.reader, используя необязательный аргумент «разделитель» в следующем формате:

import csv

with open("fruits.csv") as file:

data_reader = csv.reader(file, delimiter=";")

for line in data_reader:

print (line)

 

Поскольку в файле csv каждый столбец связан со значениями в строке, вы можете создать объект «словарь» Python при чтении данных из файла «csv». Для этого вам нужно использовать метод «DictReader», как показано в приведенном ниже коде:

import csv

with open("fruits.csv") as file:

data_reader = csv.DictReader(file)

for line in data_reader:

print (line)

 

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

{'Mango': '50', 'Banana': '70', 'Apple': '30', 'Orange': '90'}</cce_text>



So now you have a dictionary object that associates individual columns with their corresponding values in the rows. This works fine if you have only one row. Let's assume that the "fruits.csv" file now includes an additional row that specifies how many days it will take for the stock of fruit to perish.



[cce_text width="100%" height="100%" escaped="true" theme="blackboard" nowrap="0"]Mango,Banana,Apple,Orange

50,70,30,90

3,1,6,4

 



Если у вас несколько строк, выполнение одного и того же примера кода, приведенного выше, приведет к другому результату.

{'Mango': '50', 'Banana': '70', 'Apple': '30', 'Orange': '90'}

{'Mango': '3', 'Banana': '1', 'Apple': '6', 'Orange': '4'}

 

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

import csv

with open("fruits.csv") as file:

data_reader = csv.DictReader(file)

data_dict = {}

for line in data_reader:

for key, value in line.items():

data_dict.setdefault(key, [])

data_dict[key].append(value)

print (data_dict)

 

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

{'Mango': ['50', '3'], 'Banana': ['70', '1'], 'Apple': ['30', '6'], 'Orange': ['90', '4']}

 

Цикл «for» используется для каждого элемента объекта «DictReader» для перебора пар ключ-значение. Перед этим определяется новая переменная словаря Python «data_dict». Он будет хранить окончательные сопоставления данных. Во втором блоке цикла for используется метод setdefault словаря Python. Этот метод присваивает значение ключу словаря. Если пара «ключ-значение» не существует, создается новая из указанных аргументов. Таким образом, в этом случае новый пустой список будет назначен ключу, если он еще не существует. Наконец, «значение» добавляется к соответствующему ключу в конечном объекте «data_dict».

 

Запись данных в файл CSV

Чтобы записать данные в файл «csv», вам нужно будет использовать метод «writer» из модуля «csv». В приведенном ниже примере к существующему файлу «fruit.csv» будет добавлена ​​новая строка.

import csv

with open("fruits.csv", "a") as file:

data_writer = csv.writer(file)

data_writer.writerow([3,1,6,4])

 

Первый оператор открывает файл в режиме «добавления», обозначенном аргументом «а». Затем вызывается метод «писателя», и ему передается ссылка на файл «fruit.csv» в качестве аргумента. Метод «writerow» записывает или добавляет новую строку в файл.

Если вы хотите преобразовать словарь Python в файловую структуру «csv» и сохранить вывод в файле «csv», попробуйте этот код:

import csv

with open("fruits.csv", "w") as file:

    headings = ["Mango", "Banana", "Apple", "Orange"]

    data_writer = csv.DictWriter(file, fieldnames=headings)

    data_writer.writeheader()

    data_writer.writerow({"Mango": 50, "Banana": 70, "Apple": 30, "Orange": 90})

    data_writer.writerow({"Mango": 3, "Banana": 1, "Apple": 6, "Orange": 4})

 

После открытия пустого файла «fruit.csv» с помощью оператора «with open» определяется новая переменная «заголовки», которая содержит заголовки столбцов. Новый объект «data_writer» создается путем вызова метода «DictWriter» и передачи ему ссылки на файл «fruit.csv» и аргумент «fieldnames». В следующей строке заголовки столбцов записываются в файл с помощью метода «writeheader». Последние два оператора добавляют новые строки к соответствующим заголовкам, созданным на предыдущем шаге.

 

Заключение

Файлы CSV предоставляют удобный способ записи данных в табличном формате. Встроенный в Python модуль «csv» позволяет легко обрабатывать данные, доступные в файлах «csv», и реализовывать на них дополнительную логику.



2021-04-02T16:38:35
Python

Уязвимости состояния гонки в веб-приложениях

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

Различные процессы могут взаимодействовать друг с другом без адекватных мер. Эти атаки также известны как атака Time of Check, атака Time of Use или атаки TOC/TOU. Уязвимости в условиях гонки возникают в первую очередь из-за базовых программных ошибок, которые обычно создают разработчики, и эти сбои оказались дорогостоящими. Злонамеренные организации использовали расовые условия для множества злонамеренных целей, например, от получения бесплатных ваучеров до кражи денег с онлайн-счетов и инвестиционных фирм.

Предположим, что два параллельных потока выполнения пытаются поднять значение глобальной переменной на 5. В конечном счете, тогда глобальная переменная будет иметь значение 10. Однако если все потоки выполняются одновременно, выполнение может быть неправильным без блокировки ресурсов или синхронизации. Когда первый поток выполняет некоторые манипуляции с этой глобальной переменной, второй поток читает ее и начинает выполнять некоторые другие манипуляции. В этом случае конечное значение будет не таким, как ожидалось.

Это происходит, так как эффект завершения одного потока зависит от результата другого. Когда два потока выполняются одновременно, будут непредвиденные последствия.

 

Объем атак на состояние расы:

Представьте себе, что что-то более важное выполняется двумя потоками из приведенного выше примера, например обмен деньгами между банковскими счетами. Чтобы правильно отправить деньги, программа должна будет выполнить эти задачи в следующей последовательности: проверить, достаточно ли остатка на счете отправителя, добавить деньги на счет получателя, а затем вычесть со счета отправителя. Но если вы одновременно отправляете два запроса, вы можете вызвать условие, при котором последовательность выполнения потока изменится. В подобной ситуации вы получите совсем другую сумму, чем ожидали.

Уязвимость Race condition была обнаружена Егором Хомаковым на сайте Starbucks. Он нашел способ создать бесконечное количество кредитов на подарочные ваучеры Starbucks бесплатно, используя разные браузеры с разными файлами cookie.

Выдающаяся атака Meltdown является примером уязвимости состояния расы. В атаке meltdown слабость вызывается параллельной обработкой извлечения данных из памяти и проверкой подлинности того, разрешен ли пользователю доступ к памяти. Этот недостаток позволяет инструменту избежать стандартных проверок привилегий, которые отделяют механизм атаки от доступа к данным ОС. Эта лазейка позволяет любому несанкционированному процессу просматривать данные и информацию с любого другого адреса, связанного с текущим состоянием прогресса в памяти. В процессе неправильного выполнения информация с неутвержденного адреса часто быстро складывается в кэш центрального процессора, из которого эта информация может быть восстановлена.

 

Реальные сценарии атак:

Постоянно отправляя многочисленные запросы на веб-сервер, вы можете искать и манипулировать условиями гонки в веб-приложениях. Если вы хотите узнать, можете ли вы снять больше денег, чем у вас есть на банковском счете, используя функцию curl, вы можете одновременно отправить несколько запросов на вывод средств на сервер.

curl (withdraw 50000) & (withdraw 50000) & (withdraw 50000) & (withdraw 50000) & (withdraw 50000) & (withdraw 50000)

 

Чем больше требований вы подадите за короткий промежуток времени, тем выше вероятность того, что ваша атака сработает.

Более того, если вы отправляете асинхронные последующие запросы, вы будете следовать за пользователем несколько раз вместо отправки ответа об ошибке, то есть если вы добавите поддельный заголовок, содержащий %s, отбрасывая запросы с помощью turbo intruder, и вставите следующий код python:

def followReqs(target, wordlists):

engine = RequestEngine(endpoint=target.endpoint,

concurrentConnections=40,

requestsPerConnection=100,

pipeline=False

)



for i in range(40):

engine.queue(target.req, str(i), gate='check')



engine.openGate('check')

.complete(timeout=60)

def responseHandle(req, interesting):

table.add(req)

Вы увидите кнопку атаки. После нажатия этой кнопки Turbo Intruder отправляет 40 запросов и сканирует коды состояния. Если вы видите несколько ответов со статусом 201 сгенерированный, это означает, что вы несколько раз следили за этим человеком.

Существует уязвимость race condition, при которой вы можете получить доступ к нескольким консолям, предлагаемым для бесплатных учетных записей. Большинство сайтов, предоставляющих бесплатные консоли, имеют бесплатные учетные записи, стандартные и премиальные пакеты. Бесплатные аккаунты предоставляют только 2 или 3 консоли на одного пользователя. Чтобы нарушить это ограничение и использовать неограниченное количество консолей, вторгнитесь в запрос GET, используя нулевые полезные нагрузки несколько раз, например 100 или 200. А затем удалите любую из консолей вручную из пользовательского интерфейса во время выполнения потоков.

 

Вывод:

В качестве средства подрыва контроля доступа включаются условия гонки. Любая программа, зависящая от механизмов контроля доступа, может оказаться уязвимой. Большую часть времени на сайтах финансовых учреждений хакеры используют расовые условия. Поскольку это может привести к неограниченным финансовым выгодам для хакера, если состояние гонки может быть обнаружено на жизненно важной функции, такой как снятие наличных, денежный перевод или оплата кредитной картой. Платформы электронной коммерции, видеоигры и услуги онлайн-голосования-это другие технологии высокого риска. Реализация безопасного параллелизма-это секрет избежания гоночных условий. И вы также можете использовать блокировки ресурсов. Также будет встроена функция блокировки для языков программирования с возможностями параллелизма, которые помогают предотвратить такие условия. Кроме того, соблюдение стандартов безопасного кодирования, т. е. концепции наименьших привилегий и кода аудита, уменьшит вероятность нарушения программы.



2021-04-01T23:42:08
Python

Как переместить файл в другой каталог в Python

Файл используется для постоянного хранения данных. Иногда нам требуется переместить расположение файла с одного пути на другой для целей программирования. Эту задачу можно выполнить с помощью скрипта Python несколькими способами. Move() — это наиболее часто используемый метод Python для перемещения файла из одного каталога в другой каталог, определенный в модуле shutil. Другой способ перемещения файла с помощью метода rename(), который определен в модуле os. Эти два метода можно использовать для перемещения файла из одного каталога в другой, как описано в этой статье.

 

Пример 1: Переместить файл с исходным именем

Способ перемещения файла из одного места в другое с исходным именем показан в следующем скрипте. Модуль shutil импортируется в скрипт для использования функции move() для перемещения файла. Модуль пути импортируется для использования функции exists() для проверки того, существует ли данное имя файла или нет. Если файл существует, будет определен целевой путь к файлу, куда он будет перемещен. Место назначения будет напечатано после перемещения файла. Если файл не существует, будет напечатано сообщение об ошибке.

# Импортировать модуль shutil



import shutil



# Импортировать модуль пути из ОС



from os import path





# Задайте имя файла с путем



source_path = "fruit.txt"





# Проверьте, существует ли файл



if path.exists(source_path):



# Задайте путь к каталогу, в который будет перемещен файл



destination_path = "Files"



# Переместите файл в новое место



new_location = shutil.move(source_path, destination_path)



# Распечатать новое расположение файла



print("% s перемещен в указанное место,% s" % (source_path , new_location))



else :



# Распечатать сообщение, если файл не существует



print ("Файл не существует.")

Вывод

Здесь файл fruit.txt существует, и он перемещен в папку Files.

 

Пример 2. Переместить файл с новым именем

Способ перемещения файла из одного места в другое путем переименования файла показан в следующем сценарии. Модули shutil и path были импортированы для перемещения файла и проверки его существования. Новое имя файла определено в пути назначения файла. Если файл перемещен успешно, то путь к файлу с новым именем будет напечатан, иначе будет напечатано сообщение об ошибке.

# Импорт модуля shutil



import shutil



# Импорта из OS



from os import path





# Установить имя файла с путем



source_path = «dept.txt»





# Проверьте файл существует или нет



if path.exists(source_path):



# Задайте путь к каталогу назначения с новым именем



destination_path = "Files/department.txt"



# Переместите файл в новое место



new_location = shutil.move(source_path, destination_path)



# Распечатать новое расположение файла



print("{0} перемещается в нужное место, {1}".format(source_path,new_location))



else:



# Распечатать сообщение, если файл не существует



print("Неверный путь к файлу.")

Вывод

Здесь, файл, dept.txt, существует, и он был переименован с именем department.txt и перемещено в папку Files.

 

Пример 3. Перемещение папки с несколькими файлами

Способ перемещения папки с несколькими файлами показан в следующем сценарии. Здесь переменная source_path содержит исходный путь к папке, а переменная destination_path содержит путь к целевой папке. Остальное содержимое сценария такое же, как в двух предыдущих примерах.

# Импортировать модуль shutil



import shutil



# Импортировать модуль пути из ОС



from os import path





# Установить путь к каталогу файлов для перемещения



source_path = "Images/dice"





# Проверить, существует



if path.exists(source_path):



# Задайте путь к каталогу



destination_path = "Files/dice"



# Переместите каталог с файлами в новое место



new_location = shutil . ход ( source_path , destination_path )



# Распечатать новое расположение



new_location = shutil.move(source_path, destination_path)



else :



# Распечатать сообщение, если путь к каталогу не существует



print("Недопустимое расположение каталога.")

Вывод

Согласно сценарию, папка dice переместилась в папку Files/dice.

 

Пример 4. Перемещение всех файлов и папок определенного каталога

Способ перемещения одной папки с несколькими файлами был показан в предыдущем примере. Но папка или каталог может также содержать несколько папок с несколькими файлами. В этом примере показано, как переместить этот тип папки в другое место. Модуль os был импортирован в этот сценарий для использования функции rename(), которая перемещает содержимое папки с вложенными папками и несколькими файлами. Функция listdir() используется для создания списка файлов и папок исходной папки. Затем цикл for использовался для повторения списка и перемещения содержимого исходной папки в целевую папку с помощью функции rename().

# Импортировать модуль os



import os



# Установить путь к каталогу файлов для перемещения



source_path = "documents/"



# Проверить, существует ли путь к каталогу,



if os.path.exists(source_path):



# Задайте путь к каталогу



destination_path = "Files/"



# Создайте список файлов и папок исходного пути



filelist = os.listdir(source_path)





# Итерировать список файлов и папок



for file in filelist:



os.rename(source_path + file, destination_path + file)



# Распечатать новое местоположение



print("Все файлы и папки {0} перемещаются в нужное место, {1}".format(source_path, destination_path))



else:



# Распечатать сообщение если путь к каталогу не существует,



print("Неверный путь к каталогу.")

Вывод

По сценарию все файлы и папки папки с документами переместились в папку Files.

 

Вывод

В этой статье показаны различные способы перемещения одного или нескольких файлов. Использование модулей shutil и os для перемещения файлов и папок было объяснено на простом примере, который легко помогает пользователям python выполнять этот тип задач.



2021-03-25T12:49:54
Python

Сравнение Django и SQLAlchemy

По мере того, как со временем развивается и совершенствуется все больше и больше технологий, количество пользователей, получающих доступ в Интернет, растет еще больше, и в результате объем данных, с которыми приходится иметь дело предприятиям и организациям, растет в геометрической прогрессии. Чтобы компания была успешной, ей нужны инструменты и инфраструктура, которые могут легко работать с этими большими наборами данных. Именно здесь появляется база данных, которая в основном предназначена для хранения и сбора данных. Более того, его организованная форма позволяет пользователям легко управлять набором данных и получать к нему доступ. Сами базы данных требуют системы управления, которая позволяет им хранить и предоставлять доступ к данным. В основном язык SQL используется для выполнения операций в базе данных, однако по мере роста и усложнения вашего приложения,

Альтернативой этому была разработана структура ORM (объектно-реляционное сопоставление), которая фактически создает мост между базой данных и языком программирования, который вы предпочитаете использовать при создании своего приложения. В этой статье мы рассмотрим и сравним плюсы и минусы двух наиболее популярных и широко используемых ORM, Django и SQLAlchemy.

 

Django против SQLAlchemy

Оба ORM — Django и SQLAlchemy — два самых популярных инструмента реляционного сопоставления на основе Python, и каждый из них имеет свои собственные уникальные преимущества. Давайте теперь перекрестно исследуем и рассмотрим оба их различия бок о бок.

 

1) Реализация уровня доступа к данным

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

SQLAlchemey использует реализацию Data Mapper, которая действует как средний уровень между вашим приложением и базой данных и передает данные между ними, сохраняя при этом их соединение независимо друг от друга. Это обеспечивает большую гибкость между двумя уровнями, а также более эффективное использование базы данных.

 

2) Лучше со сложными запросами

И Django, и SQLAlchemy — два отличных ORM, которые предоставляют одни из лучших функций, которые вы можете найти в инструментах реляционного сопоставления. С точки зрения обработки сложных запросов SQLAlchemy имеет преимущество, поскольку он намного лучше взаимодействует с базой данных и, как результат, его можно использовать для написания сложных запросов без необходимости возвращаться к необработанному SQL. Чтобы понять эту концепцию, давайте взглянем на следующие запросы, написанные как на Django, так и на SQLAlchemy.

Django:

Football.objects.filter(team__name="Manchester United")

SQLAlchemy:

SQLAlchemy: session.query(Football).join(Football, Team).filter(Team.name=="Kamma Sing")

 

Как видно из синтаксиса двух ORM, Django выглядит более абстрактным в своем запросе и показывает только установленное соединение между различными таблицами базы данных, в то время как SQLAlchemy идет гораздо глубже. Это различие между ними показывает, что Django гораздо более ленив и эффективнее справляется со сложными запросами.

 

3) Поддержка сообществ и баз данных

И Django, и SQLAlchemy являются чрезвычайно популярными фреймворками для реляционного сопоставления, и они поддерживаются некоторыми чрезвычайно удивительными сообществами. Последний, однако, превосходит это, поскольку имеет гораздо большее сообщество вместе с совершенно потрясающей документацией, которая свидетельствует о том, что члены сообщества вкладывают в это свое время. Даже если вы столкнетесь с какой-либо проблемой, вы можете легко опубликовать сообщение на StackOverflow или других форумах, и там найдется большое количество людей, желающих вам помочь.

Наряду с этим и Django, и SQLAlchemy поддерживают большой набор баз данных, таких как MySQL, PostgreSQL, Oracle и SQLite. Для пользователей, которые уже используют Microsoft SQL или планируют это сделать, SQLAlchemy снова является ответом, поскольку MSSQL обеспечивает его полную поддержку.

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

 

4) Приложения

Django был разработан в основном для веб-приложений, и именно там он работает лучше всего, поскольку имеет множество встроенных инструментов, таких как интеграция форм, предварительная проверка и т. Д .; все они чрезвычайно полезны для веб-приложений. В дополнение к этому, если вам просто требуются базовые запросы, тогда Django будет работать довольно хорошо, поскольку его также намного легче изучить.

Однако, если ваши веб-приложения или фреймворки требуют немного более сложных запросов, то SQLAlchemy — это то, что вам нужно. В дополнение к этому, поскольку он напрямую взаимодействует с базой данных, вы можете просто запускать запросы к базе данных, фактически не используя ORM. Кроме того, SQLAlchemy намного мощнее, чем Django, хотя и требует немного большего обучения.

 

Вывод:

И Django, и SQLAlchemy являются чрезвычайно популярными инструментами объектно-реляционного сопоставления, имеют большие сообщества для их поддержки и используются в широком спектре приложений по всему миру. Какой из них вам больше подходит? Это в основном зависит от ваших требований и от того, где именно вы хотите их использовать. В общем, оба являются отличным выбором для использования в качестве вашей системы ORM.



2021-03-24T13:28:16
Базы данных

Что такое Django ORM?

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

Базы данных являются одной из самых популярных технологий, используемых для сбора и организации данных, поскольку они позволяют легко получить доступ к данным, управлять ими и обновлять их. Однако этим базам данных требуется система управления для выполнения этих задач. В основном язык SQL используется для выполнения операций в базе данных, однако по мере того, как ваше приложение растет и становится более сложным, становится чрезвычайно трудно иметь представление о том, что именно делает каждая операция. Именно здесь на сцену выходит техника объектно-реляционного сопоставления (ORM). Это позволяет запрашивать данные и манипулировать ими с помощью любого объектно-ориентированного языка программирования по вашему выбору. ORM уменьшают сложность вашего кода и делают его более понятным, что, в свою очередь, упрощает обновление, поддержку и повторное использование кода.

В этой статье мы рассмотрим Django ORM, который представляет собой ORM на основе Python и, следовательно, является одной из самых популярных технологий, используемых в наши дни.

 

Что такое Django?

Прежде чем мы перейдем к рассмотрению ORM Django, давайте сначала посмотрим, что на самом деле представляет собой эта технология Pythonic под названием Django.

Django — это бесплатный веб-фреймворк с открытым исходным кодом, разработанный на Python, поэтому он имеет очень чистый и аккуратный дизайн, а также простой, гибкий, надежный и масштабируемый. Он упрощает работу веб-разработчиков, поскольку предоставляет пользователям готовые компоненты, которые, в свою очередь, не позволяют им писать все с нуля и, как следствие, ускоряют их работу и сокращают накладные расходы на их веб-сайтах. В дополнение к этому, он чрезвычайно безопасен и помогает пользователям избежать проблем с безопасностью, таких как атаки восстановления пользовательского интерфейса, SQL-инъекции и т. д. У него также очень большое сообщество, которое всегда доступно через форумы и всегда готово предложить свою помощь другим.

Давайте теперь наконец посмотрим на Django ORM и некоторые из его основных функций.

 

Доступ к Django ORM

После установки Django и настройки его проекта нам обычно предоставляются следующие исходные файлы:

Что такое Django ORM?

 

Здесь mysite относится к имени созданного вами проекта. Все эти файлы используются по-своему, и важно знать, какую роль играет каждый файл. Здесь мы сосредоточимся на файле manage.py, который будет контролировать для нас множество различных вещей, таких как настройка сервера, выполнение миграций, связь с базой данных, а также вход в режим ORM.

Чтобы открыть Django ORM, откройте командную строку из основного каталога вашего проекта Django и выполните следующую команду:

$ python manage.py shell

 

Это откроет для нас интерактивную оболочку, которая позволит нам начать взаимодействие с базой данных с помощью ORM.

 

Управление базой данных с помощью запросов в Django ORM

Поскольку ORM позволяет нам взаимодействовать с базой данных, теперь мы можем писать различные запросы для извлечения и управления данными из базы данных. Однако, прежде чем мы сможем начать работу с базой данных в оболочке, мы сначала должны импортировать все связанные с ней модели. Это можно сделать, просто запустив команду в интерактивной оболочке, как показано ниже:

$ from appName.models import modelName

 

Здесь appName относится к имени вашего приложения, которое вы создали, и, следовательно, где в настоящее время хранятся ваши модели. ModelName относится к имени модели, которую вы хотите импортировать и использовать. Здесь вы можете импортировать несколько моделей.

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

$ Post.objects.all()

 

В ORM мы можем делать несколько других вещей, таких как создание новых данных базы данных, обновление данных и все другие команды базы данных, которые вы можете.

 

Моделирование базы данных

Одна из лучших вещей, которые Django ORM предоставляет своим пользователям, — это возможность автоматически связывать и устанавливать отношения между атрибутами объекта вашей модели и соответствующими полями таблицы. В базах данных существуют в основном три типа отношений. это отношения «один к одному», отношения «один ко многим» или «многие к одному» и отношения «многие ко многим».

Отношение «один к одному», как следует из названия, означает, что запись одной таблицы соответствует одной записи другой таблицы. В Django ORM мы можем легко установить это следующим образом:

class Parent(models.Model):

user = models.OneToOneField(

User,

on_delete=models.CASCADE,

primary_key=True,

)

name_of_father = models.CharField(max_length=100)

name_of_mother = models.CharField(max_length=100)

 

Здесь у каждого пользователя могут быть только одинокие биологические родители, и, следовательно, это отношения один-к-одному. Теперь, если мы удалим любого пользователя, имеющего доступ к этой модели, он также удалит модель 2-го пользователя, поскольку они зависят друг от друга.

Отношения «один ко многим» или «многие к одному» относятся к отношениям, при которых родительская запись может иметь несколько дочерних записей, однако у нее может быть только один дочерний элемент или ни одного дочернего. В Django ORM мы можем легко установить эту связь с помощью поля ForeignKey:

class Customer(models.Model):

name = models.CharField(max_length=255)

class Vehicle(models.Model):

customer = models.ForeignKey(

Customer,

on_delete=models.CASCADE

)

 

Как видно из приведенного выше кода, у клиента может быть несколько транспортных средств.

Наконец, отношения «многие ко многим» определяют отношения, при которых несколько таблиц могут быть связаны друг с другом. Мы можем создать это с помощью поля ManyToMany. В приведенном ниже примере мы создали две модели: одну для пользователя, а другую — для его сообщений. Также может быть несколько пользователей, поскольку у каждого пользователя может быть несколько сообщений.

class User(models.Model):

post = models.ManyToManyField(Post, blank=True)

friends = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)

class Post(models.Model):

post = models.TextField()

likes = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='user_likes')

Вывод

Django ORM — чрезвычайно мощный инструмент, который значительно упростил работу веб-разработчиков. Он имеет множество функций, таких как манипулирование моделями базы данных, установление отношений между моделями и многое другое. Вкратце, Django ORM — одна из лучших вещей, поставляемых с Django, и очень эффективная при выполнении поставленной перед ним задачи.



2021-03-22T11:58:27
Python

Что такое случайные функции Python?

Python предоставляет несколько функций для генерации случайных чисел. Большинство этих функций доступны в модуле Python random. Вы можете использовать эти функции для генерации случайных чисел в ваших скриптах Python.

Вот пять основных функций, используемых для генерации случайных чисел в скрипте Python.

  1. random()
  2. randint()
  3. uniform()
  4. randrange()
  5. choice()

 

1. Функция random() в Python:

Эта функция возвращает случайное значение с плавающей запятой от 0 до 1. Вы также можете указать диапазон, чтобы переопределить значения по умолчанию.

import random



# Выведите случайное число с плавающей запятой от 0 до 1

x = random.random()

print (x)



# Выведите случайное число с плавающей запятой от 0 до 10

x = random.random() * 10

print (x)



# Выведите случайное число с плавающей запятой между -5 и +5

x = random.random() * 10 – 5

print (x)

2. Функция randint() в Python:

Функция randint() принимает диапазон и выдает целое число между заданным диапазоном.

import random



# Выведите случайное целое число от 10 до 100

x = random.randint(10, 100)

print (x)

3. Функция uniform() в Python:

Так же, как функция randint() генерирует целое число в заданном диапазоне, uniform() делает то же самое для чисел с плавающей запятой. import random

# Выведите число с плавающей запятой от 10 до 50



x = random.uniform(10, 50) print (x)

4. Функция randrange() в Python:

Функция randrange() используется для выбора целочисленного значения в определенном диапазоне. Вы также можете указать выбор четного или нечетного числа в диапазоне.

import random



# Выведите целое число от 0 до 9

x = random.randrange(10)

print (x)



# Выведите целое число от 10 до 99

x = random.randrange(10, 100)

print (x)



# Выведите четное целое число от 10 до 99

x = random.randrange(10, 100, 2)

print (x)

5. Функция choice() в Python:

Функция Python choice() используется для выбора одного случайного элемента из последовательности.

import random



# Выберите случайный элемент из приведенной ниже последовательности

x = random.choice([‘red’, ‘geen’, ‘yellow’])

print (x)



2021-03-16T19:29:51
Python