Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6🔥2
Прежде чем начать вставку внешних ключей, необходимо подготовить базу данных и создать таблицы, между которыми мы будем устанавливать связи. Рассмотрим простой пример двух таблиц:
authors и books. Таблица authors будет содержать информацию об авторах, а таблица books - информацию о книгах, написанных этими авторами. Для начала создадим эти таблицы с использованием языка SQL.CREATE TABLE authors (
author_id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE books (
book_id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author_id INT,
FOREIGN KEY (author_id) REFERENCES authors (author_id)
);
Теперь, когда наша база данных готова, мы можем перейти к вставке данных и внешних ключей с помощью Python. Для этого нам понадобится библиотека
psycopg2, которая позволяет взаимодействовать с PostgreSQL базой данных. Убедитесь, что она установлена:pip install psycopg2
Далее, напишем скрипт на Python, который будет вставлять данные в таблицы
authors и books, устанавливая соответствующие внешние ключи.import psycopg2
# Соединение с базой данных
conn = psycopg2.connect(
dbname="your_db_name",
user="your_db_user",
password="your_db_password",
host="your_db_host",
port="your_db_port"
)
cursor = conn.cursor()
# Вставка данных в таблицу authors
cursor.execute("INSERT INTO authors (name) VALUES (%s) RETURNING author_id", ("J.K. Rowling",))
author_id = cursor.fetchone()[0]
#Вставка данных в таблицу books с указанием внешнего ключа
cursor.execute("INSERT INTO books (title, author_id) VALUES (%s, %s)", ("Harry Potter", author_id))
# Сохранение изменений и закрытие соединения
conn.commit()
cursor.close()
conn.close()
Внешние ключи помогают поддерживать целостность данных в базе данных. Например, они не позволяют вставлять в таблицу
books значения author_id, которых нет в таблице authors. Рассмотрим, как это работает на практике. Попробуем вставить книгу с несуществующим author_id и посмотрим, что произойдет.try:
cursor.execute("INSERT INTO books (title, author_id) VALUES (%s, %s)", ("Unknown Book", 999))
conn.commit()
except psycopg2.IntegrityError as e:
conn.rollback()
print("Ошибка целостности данных: невозможно вставить книгу с несуществующим автором.")
В данном случае
psycopg2 выбросит исключение IntegrityError, и мы сможем обработать его, откатив изменения и предупредив пользователя об ошибке.Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6🔥4
🤨9👍7🤓5❤2
// —> целочисленное деление
.count —> считает количество повторений текста/символа в строке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🤓4🔥3
➕Поддерживает асинхронное программирование, что позволяет эффективно обрабатывать множество запросов без блокирования основного потока.
➕Хорошо документирована и имеет большое сообщество разработчиков.
➕Предоставляет обширный набор функций для работы с Telegram API.
➖Деплоится не на всех бесплатных сервисах.
➕Простой в использовании и понимании, особенно для новичков в разработке телеграм-ботов.
➕Хорошо документирована и имеет активное сообщество разработчиков.
➕Предоставляет обширный набор функций для работы с Telegram API.
➖Не поддерживает асинхронное программирование, поэтому может быть неэффективным при обработке большого количества запросов одновременно.
➖Из-за синхронного подхода может возникать блокирование основного потока при выполнении долгих операций.
➕Простой в использовании и понимании.
➕Хорошо документирована и имеет небольшое, но активное сообщество разработчиков.
➕Предоставляет обширный набор функций для работы с Telegram API.
➖Не поддерживает асинхронное программирование, поэтому может быть неэффективным при обработке большого количества запросов одновременно.
➖Некоторые функции могут быть менее гибкими или сложными в использовании по сравнению с другими библиотеками.
➕Простой в использовании и понимании, особенно для новичков в разработке телеграм-ботов.
➕Хорошо документирована и имеет некоторые примеры использования.
➕Предоставляет базовый набор функций для работы с Telegram API.
➖Ограничена в функциональности и не предоставляет некоторые продвинутые возможности, доступные в других библиотеках.
➖Неактивно поддерживается и может быть устаревшей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5🔥3
Это встроенная библиотека Python, которая предоставляет интерфейс для механизма импорта. С ее помощью вы можете программно импортировать модули, перезагружать их и даже создавать свои собственные импортеры!
import importlib
# Динамический импорт модуля
math = importlib.import_module('math')
# Использование импортированного модуля
print(math.pi) # Выводит 3.141592653589793
# Перезагрузка модуля
importlib.reload(math)
• Динамически импортировать модули
• Перезагружать модули во время выполнения
• Создавать пользовательские импортеры
• Работать с пространствами имен пакетов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥5
import difflib
# Две строки для сравнения
string1 = "Привет, как дела?"
string2 = "Привет, как у тебя дела?"
# Используем SequenceMatcher для получения отличий
d = difflib.Differ()
diff = d.compare(string1.split(), string2.split())
# Вывод различий
print('\n'.join(diff))
Мы используем
difflib.Differ() для сравнения двух строк, разбивая их на слова.Метод compare возвращает итератор, который показывает различия между строками.- Результат отображает изменения с символами:
-
– если слова одинаковые,-
- – если слово присутствует только в первой строке,-
+ – если слово присутствует только во второй строке.Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥3
Она упрощает автоматизацию задач, которые требуют вызова командной строки из\ кода. Это может быть запуск скриптов, утилит, вызов программ для обработки данных и т. д.
— Удобный синтаксис для запуска команд и программ из Python кода. Позволяет вызывать команды командной строки так же просто, как обычные функции.
— Автоматическое формирование командной строки. Можно передавать аргументы и параметры в виде обычных переменных,
Plumbum сам сформирует командную строку.— Перенаправление ввода/вывода. Поддержка стандартных операторов Unix для работы с потоками данных.
— Проверка кодов возврата и обработка ошибок.
— Локальное или удаленное выполнение. Возможность запускать команды как локально, так и по SSH на удаленных хостах.
from plumbum import local
ls = local["ls"]
output = ls("-l")
print("Вывод команды 'ls -l':")
print(output)
# Также можно выполнять составные команды
# Например, мы можем использовать команду `grep` для фильтрации вывода
grep = local["grep"]
result = (ls("-l") | grep[".py"])() # Пайпим вывод ls в grep
print("\nВывод файлов с расширением .py:")
print(result)
local из модуля plumbum.ls с помощью local["ls"].-l, который выводит содержимое текущей директории в длинном формате.output и затем печатаем.grep и используем возможность пайпинга (|) для фильтрации вывода команды ls, чтобы показать только файлы с расширением .py.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3🔥3
import eel
eel.init('web')
@eel.expose
def say_hello(x):
print('Hello %s' % x)
eel.say_hello('World')
eel.start('index.html')
Декоратор @eel.expose делает функцию say_hello() доступной для вызова из Javascript.
Вызов eel.say_hello() вызывает эту функцию из Python кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5🔥2
Логирование имеет множество преимуществ. Оно помогает разработчикам отслеживать и исправлять ошибки, анализировать поведение системы и даже предотвращать возможные проблемы в будущем. Кроме того, логи могут быть использованы для аудита, что особенно важно для обеспечения безопасности системы.
Применять логирование можно разными способами. Во-первых, можно использовать встроенные средства ОС или специализированные инструменты для логирования. Во-вторых, можно внедрять функции логирования непосредственно в свои приложения. В любом случае, важно помнить о необходимости разделять логи по уровням важности и обеспечивать их надлежащее хранение и архивацию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3🔥3
zipfile, который предоставляет функционал для работы с архивами ZIP. Давайте создадим простой пример, чтобы продемонстрировать его возможности:import zipfile
# Создаем новый ZIP файл
with zipfile.ZipFile('новый_архив.zip', 'w') as new_zip:
# Добавляем файлы в архив
new_zip.write('file1.txt')
new_zip.write('file2.txt')
# Можно добавить еще файлы по мере необходимости
zipfile обладает широкими возможностями, позволяя извлекать файлы, читать содержимое архива, добавлять и удалять файлы, а также многое другое. Это удобный инструмент, который позволяет манипулировать архивами непосредственно из кода Python.Если вам интересно узнать больше о модуле zipfile или экспериментировать с архивами в Python, рекомендую обратиться к официальной документации Python.Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤6🔥2
Что выдаст код выше❔
Anonymous Quiz
43%
C#
15%
"Python", "JavaScript", "C++", "Java"
18%
["Python", "JavaScript", "C++", "Java"]
10%
Python
8%
None
6%
Error
👍8😐4🤓3❤1
Как вы знаете (или не знаете, тогда знайте) метод .pop удаляет элемент по индексу.
Т.е. если бы мы написали, my_list.pop(1), то элемент JavaScript бы удалился из списка.
Но а что, если мы не прокинули индекс? Тогда выбирается последний элемент. В нашем случае - c#
Но почему ответ - это не список без последнего элемента.
Все дело в том, что мы принтуем не список, а результат выполнения функции .pop. В свою очередь, функция .pop возвращает удаленный элемент (последний элемент) (( C# ))
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍7❤4🤨1
Функция get_close_matches() используется для поиска наиболее похожих вариантов в последовательности. Это полезно, например, при реализации системы автодополнения, где нужно предложить пользователю наиболее вероятные варианты на основе его ввода.
import difflib
words = ['кот', 'собака', 'кит', 'слон']
difflib.get_close_matches('кот', words)
['кот', 'кит'].Функция ndiff() используется для сравнения двух последовательностей и выявления различий между ними. Она возвращает генератор, который производит строки, иллюстрирующие различия между последовательностями. Это полезно, например, при сравнении версий текстовых документов.
import difflib
str1 = "кот"
str2 = "кит"
diff = difflib.ndiff(str1, str2)
print('\\n'.join(diff))
к
- о
+ и
т
Функция SequenceMatcher() является более общей и мощной функцией, чем ndiff(). Она позволяет сравнивать любые две последовательности и определять степень их сходства.
import difflib
str1 = "кот"
str2 = "кит"
match = difflib.SequenceMatcher(None, str1, str2)
print(match.ratio())
0.6666666666666666, что означает, что строки совпадают на 66.67%.Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5🔥2