Рубрики
Без рубрики

Как использовать SQL в Python?

В следующем разделе мы обсудим, как вы можете использовать SQL в Python, используя одну из самых популярных библиотек под названием SQLite.

Автор оригинала: Pankaj Kumar.

Большинство современных приложений очень часто взаимодействуют с базами данных. А SQL или язык структурированных запросов значительно упрощает доступ к данным, хранящимся в этих базах данных, и управление ими.

Python, будучи одним из популярных языков, поддерживает как встроенные, так и сторонние библиотеки SQL.

В следующем разделе мы обсудим, как вы можете использовать SQL в Python, используя одну из самых популярных библиотек под названием SQLite.

Введение в SQLite

Причина, по которой мы выбрали SQLite для нашего урока, заключается в его бессерверной архитектуре. SQLite быстр, легок и хранит всю базу данных в файле или даже во внутренней памяти вашего компьютера (ОЗУ). Он широко используется разработчиками в тестовых средах.

Модуль SQLite изначально поставляется с Python. Таким образом, вам не придется устанавливать его извне с помощью pip.

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

Все эти особенности делают SQLite идеальным модулем как для начинающих, так и для разработчиков среднего уровня.

Шаги по использованию SQL в Python

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

1. Импорт SQLite

Первый шаг к использованию любого модуля в python-это импортировать его в самую верхнюю часть файла. В Python3 модуль известен как “sqlite3”

import sqlite3 #Importing the module

2. Создайте соединение с базой данных

После импорта модуля нам нужно создать объект базы данных с помощью метода “connect()” и передать путь к файлу базы данных в качестве аргумента.

Если в настоящее время у нас нет никаких баз данных, та же команда создаст новую базу данных с указанным нами путем/именем файла.

import sqlite3 #Importing the module

conn = sqlite3.connect("databasename.db")

""" Here, conn is the database object and 'databasename.db' is the actual database we're trying to connect with. 
If there is no database available then the same command will trigger to create a new database of the same name in our current directory."""

3. Создание объекта курсора

Как только наш объект базы данных будет создан, нам нужно настроить другой объект, способный выполнять собственные команды SQL для объекта базы данных с помощью Python.

Для этого все, что нам нужно сделать, это вызвать метод “cursor()” для нашего объекта базы данных. Все команды SQL должны выполняться с помощью объекта cursor.

curr = conn.cursor() #Here 'curr' is our new cursor object. 

4. Используйте команду SQL для создания таблиц

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

# SQL command that creates a table in the database

createTableCommand = """ CREATE TABLE NSA_DATA (
username VARCHAR(50),
phonenumber VARCHAR(15),
password VARCHAR(50),
baddeedcount INT,
secrets VARCHAR(250)
);"""

# Executing the SQL command
curr.execute(createTableCommand)

# Commit the changes
conn.commit()

Как мы видим, во-первых, нам нужно поместить команды SQL в строковую форму. Затем мы вызываем метод “execute()” для нашего объекта курсора и передаем строку в качестве аргумента.

Наконец, нам нужно вызвать метод “commit()” для нашего объекта базы данных. В противном случае изменения не будут отражены в нашей фактической базе данных. Следовательно, мы не должны забывать фиксировать изменения.

5. Добавление данных в базу данных

Следующее, что мы делаем после создания схемы базы данных, – это добавляем данные. Следуйте следующим командам, чтобы узнать, как:

# First, we write our SQL command within a string and assign it to a variable addData
addData = """INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', 23, 'None Yet');"""
print("The data has been added!")

# Then we execute the command
curr.execute(addData)

# And finally commit
conn.commit()

Выход:

INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', 23, 'None Yet')
The data has been added!

Однако, если у вас есть список данных, которые вы хотите импортировать в базу данных, не просматривая их по одному, вот подход, как вы можете импортировать данные из 2D-массивов в базу данных.

# The 2D array containing required data
data = [['abcd', '0123456789', 'Password1o1', 23, 'None Yet'],
        ['oswald', '0123456888', 'SunnyDay', 0, 'None Yet'],
        ['nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them']]

# A for loop to iterate through the data and add them one by one. 
for i in data:
    addData = f"""INSERT INTO NSA_DATA VALUES('{i[0]}', '{i[1]}', '{i[2]}', '{i[3]}', '{i[4]}')"""
    print(addData) # To see all the commands iterating
    curr.execute(addData)
print("Data added successfully!")

conn.commit()

Выход:

INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', '23', 'None Yet')
INSERT INTO NSA_DATA VALUES('oswald', '0123456888', 'SunnyDay', '0', 'None Yet')
INSERT INTO NSA_DATA VALUES('nobitanobi', '3216548876', 'ilovedoracake', '357', 'many of them')
Data added successfully!

6. Извлечение данных

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

Как только мы выполняем наш поисковый запрос с использованием объекта курсора, он не возвращает результаты сразу. Вместо этого нам нужно использовать метод “fetchall()” на нашем курсоре, чтобы получить данные.

# Our search query that extracts all data from the NSA_DATA table.  
fetchData = "SELECT * from NSA_DATA"

# Notice that the next line of code doesn't output anything upon execution. 
curr.execute(fetchData)

# We use fetchall() method to store all our data in the 'answer' variable
answer = curr.fetchall()

# We print the data
for data in answer:
    print(data)

Выход:

('abcd', '0123456789', 'Password1o1', 23, 'None Yet')
('abcd', '0123456789', 'Password1o1', 23, 'None Yet')
('oswald', '0123456888', 'SunnyDay', 0, 'None Yet')
('nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them')
('abcd', '0123456789', 'Password1o1', 23, 'None Yet')
('oswald', '0123456888', 'SunnyDay', 0, 'None Yet')
('nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them')

Вывод

Надеюсь, вы узнали, как выполнять основные операции SQL с помощью Python. Вы также должны отметить, что SQLite-не единственная доступная библиотека. Для работы на уровне производства рекомендуется использовать базы данных более высокого уровня, такие как PostgreSQL и MySQL. Хотя использование в python в основном одно и то же.

Завершенный Код:

В следующем разделе содержится полный код, используемый в этом руководстве.

Создание таблицы с использованием SQL в Python

import sqlite3

conn = sqlite3.connect("database.db")
curr = conn.cursor()

createTableCommand = """CREATE TABLE NSA_DATA (
username VARCHAR(50),
phonenumber VARCHAR(15),
password VARCHAR(50),
baddeedcount INT,
secrets VARCHAR(250)
);"""

try: 
    curr.execute(createTableCommand)
    print("Table Successfully Created!")
except:
    print("There was an error with Table creation")
finally:
    conn.commit()

Выход:

Table Successfully Created!

Добавление данных через SQL в Python

import sqlite3

conn = sqlite3.connect("database.db")
curr = conn.cursor()

# The 2D array containing required data
data = [['abcd', '0123456789', 'Password1o1', 23, 'None Yet'],
        ['oswald', '0123456888', 'SunnyDay', 0, 'None Yet'],
        ['nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them']]

# A for loop to iterate through the data and add them one by one. 
for i in data:
    addData = f"""INSERT INTO NSA_DATA VALUES('{i[0]}', '{i[1]}', '{i[2]}', '{i[3]}', '{i[4]}')"""
    print(addData) # To see all the commands iterating
    curr.execute(addData)
print("Data added successfully!")

conn.commit()

Выход:

INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', '23', 'None Yet')
INSERT INTO NSA_DATA VALUES('oswald', '0123456888', 'SunnyDay', '0', 'None Yet')
INSERT INTO NSA_DATA VALUES('nobitanobi', '3216548876', 'ilovedoracake', '357', 'many of them')
Data added successfully!

Извлечение данных с помощью SQL в Python

import sqlite3

conn = sqlite3.connect("database.db")
curr = conn.cursor()

fetchData = "SELECT * from NSA_DATA"

curr.execute(fetchData)

# We use fetchall() method to store all our data in the 'answer' variable
answer = curr.fetchall()

# We print the data
for data in answer:
    print(data)

Выход:

('abcd', '0123456789', 'Password1o1', 23, 'None Yet')
('oswald', '0123456888', 'SunnyDay', 0, 'None Yet')
('nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them')

Рекомендации

Официальная документация Python sqlite3