Merge d0a0c45003
into 2f0f400cd5
3
.env
Normal file
|
@ -0,0 +1,3 @@
|
|||
ADMIN_ID=776149633
|
||||
BOT_TOKEN=1491703059:AAEIkkEyx9bB2WxmGdYA2bcXf7eu7h1h_cA
|
||||
ip=localhost
|
|
@ -1,3 +0,0 @@
|
|||
ADMIN_ID=12345678
|
||||
BOT_TOKEN=123452345243:Asdfasdfasf
|
||||
ip=localhost
|
5
README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
------------------------------
|
||||
|
||||
Телеграм бот
|
||||
|
||||
Помощ пользователям в получении кредита
|
13
app.py
|
@ -1,3 +1,7 @@
|
|||
|
||||
from loader import db
|
||||
#from utils.set_bot_commands import set_default_commands
|
||||
|
||||
async def on_startup(dp):
|
||||
import filters
|
||||
import middlewares
|
||||
|
@ -5,9 +9,16 @@ async def on_startup(dp):
|
|||
middlewares.setup(dp)
|
||||
|
||||
from utils.notify_admins import on_startup_notify
|
||||
await on_startup_notify(dp)
|
||||
try:
|
||||
db.create_table_users()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
db.delete_users()
|
||||
|
||||
|
||||
await on_startup_notify(dp)
|
||||
#await set_default_commands(dp)
|
||||
|
||||
if __name__ == '__main__':
|
||||
from aiogram import executor
|
||||
from handlers import dp
|
||||
|
|
BIN
data/main.db
Normal file
|
@ -1,5 +1,6 @@
|
|||
from .help import dp
|
||||
from .start import dp
|
||||
from .body import dp
|
||||
from .echo import dp
|
||||
|
||||
__all__ = ["dp"]
|
||||
|
|
174
handlers/users/body.py
Normal file
|
@ -0,0 +1,174 @@
|
|||
import logging
|
||||
|
||||
|
||||
|
||||
import asyncio
|
||||
|
||||
from aiogram.types import InputFile
|
||||
from aiogram.utils.callback_data import CallbackData
|
||||
from aiogram.dispatcher.filters import Command
|
||||
from aiogram.dispatcher import FSMContext
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
from aiogram.types import ContentType, Message
|
||||
|
||||
from photos import *
|
||||
from photos.credit_image import *
|
||||
from keyboards.inline.callback_buttom import *
|
||||
|
||||
from loader import dp, bot
|
||||
|
||||
|
||||
|
||||
|
||||
@dp.message_handler(text='🛸Поделиться с другом')
|
||||
async def send_friends(message: Message):
|
||||
await message.answer('Жми на "Поделиться ботом" 👇', reply_markup=send_bot)
|
||||
|
||||
|
||||
@dp.message_handler(text="🏪Подобрать банк")
|
||||
async def found_bank(message: Message):
|
||||
photo = InputFile(path_or_bytesio="photos/loading1.jpg")
|
||||
await bot.send_photo(chat_id=message.from_user.id, photo=photo, caption=(f"<i>Приступаю к поиску </i>"))
|
||||
|
||||
await asyncio.sleep(3)
|
||||
|
||||
photo1 = InputFile(path_or_bytesio="photos/loading2.jpg")
|
||||
await bot.send_photo(chat_id=message.from_user.id, photo=photo1, caption=(f"<i><b>Поиск успешно выполнен!</b></i>\n"
|
||||
f"<i>Мне было очень сложно найти банки с хорошими условиями</i>\n"
|
||||
f"<i>которые могут продолжать свою работу во время кризиса! </i>\n"
|
||||
f"<i>Поэтому если тебе нужны деньги срочно</i>\n"
|
||||
f"<i>советую тебе заполнить анкеты во всех банках</i>"), reply_markup=show_search)
|
||||
|
||||
@dp.message_handler(text='👑Популяриные предложения')
|
||||
async def popular_value(message: Message):
|
||||
await message.answer("Выбери подходящее предложение👇🏻", reply_markup=popular_menu)
|
||||
|
||||
|
||||
# ВНИЗУ БУДЕ КРЕДИТНЕ МЕНЮ
|
||||
@dp.callback_query_handler(text="show_credit")
|
||||
async def firs_catalog(call: CallbackQuery):
|
||||
photo2 = InputFile(path_or_bytesio="photos/credit_image/Miloan.jpg")
|
||||
await call.message.reply_photo(photo=photo2, caption=("<b>Miloan</b> - <i>При помощи нашего сервиса, каждый желающий</i>\n"
|
||||
"<i>может получить кредит прямо на свою банковскую карту и </i>\n"
|
||||
"<i>всего за 15 минут. Первый кредит бесплатно (под 0,01%). Сумма</i>\n"
|
||||
"<i>первого займа – до 15000 гривен.</i>\n"
|
||||
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||
"<b>Условия:</b>\n"
|
||||
"• Сумма займа: Первый займ – до 15000 гривен\n"
|
||||
"• Срок займа: до 30 дней\n"
|
||||
"• Скидки на повторные кредиты\n\n"
|
||||
"<b>Требование к заёмщику:</b>\n"
|
||||
"• Возраст: от 18 до 65 лет\n"
|
||||
"• Гражданство Украины\n"
|
||||
"• Наличие действующей банковской карты любого украинского банка\n"
|
||||
"• Отсутствие просрочек по кредитам"
|
||||
), reply_markup=first_klick)
|
||||
|
||||
|
||||
@dp.callback_query_handler(text="give_next")
|
||||
async def second_catalog(call: CallbackQuery):
|
||||
photo3 = InputFile(path_or_bytesio="photos/credit_image/bistro_dengi.jpg")
|
||||
await call.message.reply_photo(photo=photo3, caption=("<b>ШвидкоГроші</b> - <i>лидер украинского рынка моментального</i>\n"
|
||||
"<i>кредитования. Компания предоставляет моментальные </i>\n"
|
||||
"<i>кредиты ОНЛАЙН и наличными до 5000 грн. без залога, справок и</i>\n"
|
||||
"<i>поручителей.</i>\n"
|
||||
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||
"<b>Условия:</b>\n"
|
||||
"• Сумма займа: от 600 до 10 000 грн.\n"
|
||||
"• Для повторных клиентов - до 20 000 грн. под 1%\n"
|
||||
"• Сроки пользования кредитом можно продлевать, при оплате процентов за пользование\n\n"
|
||||
"<b>Требование к заёмщику:</b>\n"
|
||||
"• Возраст: от 18 до 60 лет\n"
|
||||
"• Гражданство Украины\n"
|
||||
"• Наличие у клиента постоянного трудового дохода (может работать неофициально)"
|
||||
), reply_markup=second_menu)
|
||||
|
||||
|
||||
@dp.callback_query_handler(text="next_variant")
|
||||
async def gotovka_catalog(call: CallbackQuery):
|
||||
photo3 = InputFile(path_or_bytesio="photos/credit_image/credit1.jpg")
|
||||
await call.message.reply_photo(photo=photo3, caption=("<b>Ваша Готивочка</b> - <i>Главной составляющей системы </i>\n"
|
||||
"<i>кредитования 'Ваша Готівочка' является удобство! </i>\n"
|
||||
"<i>Мы предлагаем простые и понятные условия займа.</i>\n"
|
||||
|
||||
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||
"<b>Условия:</b>\n"
|
||||
"• Сумма займа: от 200 до 9000 грн.\n"
|
||||
"• Время рассмотрения заявки – 15 мин.\n"
|
||||
"• Без справки о доходах\n\n"
|
||||
|
||||
"<b>Преимущества.</b>\n"
|
||||
"не просим клиента ксерокопию документов или фото документов\n"
|
||||
"не просим клиента фото с паспортом или банковской картой\n"
|
||||
"не просим клиента указывать аккаунт в социальной сети\n"
|
||||
"не просим у клиента справку о доходах\n"
|
||||
"не просим клиента телефон родственника\n\n"
|
||||
|
||||
"<b>Требование к заёмщику:</b>\n"
|
||||
"• Возраст: от 18 до 60 лет\n"
|
||||
"• Гражданство Украины\n"
|
||||
"• наличие банковской карты (для перечисления кредитных средств) и мобильного телефона"
|
||||
), reply_markup=there_menu)
|
||||
|
||||
|
||||
|
||||
@dp.callback_query_handler(text="gotivochka3")
|
||||
async def credit_plus(call: CallbackQuery):
|
||||
photo3 = InputFile(path_or_bytesio="photos/credit_image/credit2.jpg")
|
||||
await call.message.reply_photo(photo=photo3, caption=("<b>CreditPlus</b> - <i>Мы являемся обществом со 100% иностранным </i>\n"
|
||||
"<i>капиталом. Благодаря этому ведем ответственный бизнес в</i>\n"
|
||||
"<i>Украине, который включает набор обязательных целей и </i>\n"
|
||||
"<i>гарантий для всех заинтересованных сторон.</i>\n"
|
||||
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||
"<b>Условия:</b>\n"
|
||||
"• Сумма займа: до 15 000 грн.\n"
|
||||
"• Время рассмотрения заявки – до 7 минут\n"
|
||||
"• Без справки о доходах\n\n"
|
||||
"<b>Требование к заёмщику:</b>\n"
|
||||
"• Возраст: от 18 до 55 лет\n"
|
||||
"• Гражданство Украины\n"
|
||||
"• наличие банковской карты (для перечисления кредитных средств) и мобильного телефона"
|
||||
), reply_markup=foo_menu)
|
||||
|
||||
|
||||
|
||||
@dp.callback_query_handler(text="crediplus")
|
||||
async def evro_groshi(call: CallbackData):
|
||||
photo4 = InputFile(path_or_bytesio="photos/credit_image/evrogroshi.jpg")
|
||||
await call.message.reply_photo(photo=photo4, caption=(
|
||||
'<b>Eurogroshi</b> - <i>При помощи нашего сервиса, каждый желающий </i>\n'
|
||||
'<i>может получить кредит прямо на свою банковскую карту и </i>\n'
|
||||
'<i>всего за 15 минут</i>\n'
|
||||
'<a href="https://rozetka.com.ua">Подробнее</a>👈\n\n'
|
||||
'<b>Условия:</b>\n'
|
||||
'• Сумма первого займа: до 4500 грн.\n'
|
||||
'• Срок займа: до 30 дней\n'
|
||||
'• Скидки на повторные кредиты\n\n'
|
||||
"<b>Требование к заёмщику:</b>\n"
|
||||
'• Возраст: от 18 лет\n'
|
||||
'• Гражданство Украины\n'
|
||||
'• Наличие действующей банковской карты любого украинского банка\n'
|
||||
'• Отсутствие просрочек по кредитам\n'
|
||||
), reply_markup=five_menu)
|
||||
|
||||
@dp.callback_query_handler(text="evrogroshi")
|
||||
async def zecredit(call: CallbackData):
|
||||
photo5 = InputFile(path_or_bytesio="photos/credit_image/zecreditor.jpg")
|
||||
await call.message.reply_photo(photo=photo5, caption=(
|
||||
'<b>Zecredit</b> - <i>это онлайн сервис благодаря которому наш клиент </i>\n'
|
||||
'<i>может получить кредит всего за считанные минуты на </i>\n'
|
||||
'<i>банковскую карту. Благодаря условиям конкуренции рынка т</i>\n' '<a href="https://rozetka.com.ua">Подробнее</a>👈\n\n'
|
||||
'<i>нашей компанией была выбрана стратегия программы </i>\n'
|
||||
'<i>лояльности для клиентов. Компания работает прозрачно, что </i>\n'
|
||||
'<i>формирует доверие у основного сегмента рынка.</i>\n'
|
||||
'<a href="https://rozetka.com.ua">Подробнее</a>👈\n\n'
|
||||
'<b>Условия:</b>\n'
|
||||
'• Сумма первого займа: до 3000 грн.\n'
|
||||
'• Срок займа: до 30 дней\n'
|
||||
'• Cервис работает круглосуточно, акция 1% на первый кредит\n\n'
|
||||
"<b>Требование к заёмщику:</b>\n"
|
||||
'• Возраст: от 18 лет\n'
|
||||
'• Гражданство Украины\n'
|
||||
'• Наличие действующей банковской карты любого украинского банка\n'
|
||||
'• Отсутствие просрочек по кредитам\n'
|
||||
), reply_markup=six_menu)
|
|
@ -1,9 +1,75 @@
|
|||
from aiogram import types
|
||||
from aiogram.types import ContentType, Message
|
||||
|
||||
from photos import *
|
||||
from aiogram.types import InputFile
|
||||
from keyboards.default.text_button import start_button, menu
|
||||
|
||||
from aiogram.dispatcher import FSMContext
|
||||
from aiogram.dispatcher.filters import Command, Text
|
||||
from aiogram.dispatcher.filters.builtin import CommandStart
|
||||
|
||||
from loader import dp
|
||||
from loader import dp, db, bot
|
||||
import sqlite3
|
||||
|
||||
|
||||
|
||||
@dp.message_handler(CommandStart())
|
||||
async def bot_start(message: types.Message):
|
||||
await message.answer(f'Привет, {message.from_user.full_name}!')
|
||||
name = message.from_user.full_name
|
||||
try:
|
||||
db.add_user(id=message.from_user.id, name=name)
|
||||
except sqlite3.IntegrityError as err:
|
||||
print(err)
|
||||
|
||||
photo = InputFile(path_or_bytesio="photos/photo1.jpg")
|
||||
await bot.send_photo(chat_id=message.from_user.id,
|
||||
photo=photo,
|
||||
caption=(f'Привет, {message.from_user.full_name}!\n\n'
|
||||
f'Я твой финансовый бот-помошник 😊\n'
|
||||
f'Я могу помочь тебе получить деньги на самых выгодных условиях под 0%!\n'
|
||||
f'Для этого мне нужно задать пару вопросов.\n\n'
|
||||
f'Жми на кнопку «Запустить»👇'), reply_markup=start_button)
|
||||
|
||||
|
||||
@dp.message_handler(Command("data"))
|
||||
async def database(message: types.Message):
|
||||
count_users = db.count_users()[0]
|
||||
await message.answer(
|
||||
"\n".join([
|
||||
f'Привет, {message.from_user.full_name}!',
|
||||
'Ти есть в базе',
|
||||
f'В базе <b>{count_users}</b> Пользователей',
|
||||
])
|
||||
)
|
||||
|
||||
|
||||
@dp.message_handler(text="Запустить 🚀")
|
||||
async def user_old(message: types.Message, state:FSMContext):
|
||||
await message.answer(f"Сколько вам лет ?\n"
|
||||
f"Напиши свой возраст...")
|
||||
await state.set_state("years")
|
||||
|
||||
|
||||
@dp.message_handler(state="years")
|
||||
async def enter_old(message: types.Message, state: FSMContext):
|
||||
years = message.text
|
||||
db.update_user_age(age=years, id=message.from_user.id)
|
||||
|
||||
photo = InputFile(path_or_bytesio='photos/photo2.jpg')
|
||||
await bot.send_photo(chat_id=message.from_user.id,
|
||||
photo=photo,
|
||||
caption=(f'Благодарю тебя, {message.from_user.full_name}!\n'
|
||||
f'Чтобы подобрать банк, который готов дать тебе деньги\n'
|
||||
f'на самых лучших условиях\n'
|
||||
f'воспользуйся кнопкой "🏪Подобрать банк"'
|
||||
f'Тестови данние '), reply_markup=menu)
|
||||
|
||||
await state.finish()
|
||||
|
||||
@dp.message_handler(text="📝Мои настройки")
|
||||
async def My_setting(message: Message):
|
||||
user = db.select_user(id=message.from_user.id)
|
||||
await message.answer(f"Страна: Україна\n"
|
||||
f"Возраст: {user}")
|
||||
|
||||
|
|
0
handlers/users/update_db.py
Normal file
27
keyboards/default/text_button.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
|
||||
|
||||
start_button = ReplyKeyboardMarkup(
|
||||
keyboard=[
|
||||
[
|
||||
KeyboardButton(text="Запустить 🚀")
|
||||
],
|
||||
],
|
||||
resize_keyboard=True, one_time_keyboard=True
|
||||
)
|
||||
|
||||
|
||||
menu = ReplyKeyboardMarkup(
|
||||
keyboard=[
|
||||
[
|
||||
KeyboardButton(text="🏪Подобрать банк"),
|
||||
KeyboardButton(text="👑Популяриные предложения")
|
||||
],
|
||||
[
|
||||
KeyboardButton(text="📝Мои настройки")
|
||||
],
|
||||
[
|
||||
KeyboardButton(text="🛸Поделиться с другом")
|
||||
]
|
||||
],
|
||||
resize_keyboard=True
|
||||
)
|
112
keyboards/inline/callback_buttom.py
Normal file
|
@ -0,0 +1,112 @@
|
|||
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from aiogram.utils.callback_data import CallbackData
|
||||
|
||||
#Поделится с другом
|
||||
send_bot = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Поделиться ботом👍🏼", switch_inline_query=f"\n"
|
||||
f"https://t.me/money_zaim_bot\n"
|
||||
f"Смотри какой крутой бот 😊")
|
||||
]
|
||||
])
|
||||
|
||||
show_search = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="🔍Показать результат поиска ", callback_data="show_credit")
|
||||
]
|
||||
])
|
||||
|
||||
popular_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Под 0%", callback_data="crediplus")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="С плохой кредитной историей", callback_data="gotivochka3")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Лучшие займы", callback_data="next_variant")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Все варианты", callback_data="give_next")
|
||||
]
|
||||
])
|
||||
|
||||
|
||||
#______________________менюшка для кредитив____________---
|
||||
|
||||
first_klick = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Еще варианты", callback_data="give_next")
|
||||
],
|
||||
|
||||
])
|
||||
|
||||
second_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Назад", callback_data="show_credit"),
|
||||
InlineKeyboardButton(text="Еще варианты", callback_data="next_variant")
|
||||
],
|
||||
|
||||
])
|
||||
|
||||
there_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Назад", callback_data="give_next"),
|
||||
InlineKeyboardButton(text="Еще варианты", callback_data="gotivochka3")
|
||||
],
|
||||
|
||||
])
|
||||
|
||||
foo_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Назад", callback_data="next_variant"),
|
||||
InlineKeyboardButton(text="Еще варианты", callback_data="crediplus")
|
||||
],
|
||||
|
||||
])
|
||||
|
||||
five_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Назад", callback_data="gotivochka3"),
|
||||
InlineKeyboardButton(text="Еще варианты", callback_data="evrogroshi")
|
||||
],
|
||||
|
||||
])
|
||||
|
||||
six_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Назад", callback_data="crediplus"),
|
||||
InlineKeyboardButton(text="Еще варианты", callback_data="zeccredit")
|
||||
],
|
||||
|
||||
])
|
||||
|
||||
seven_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[
|
||||
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="Назад", callback_data="crediplus"),
|
||||
InlineKeyboardButton(text="Еще варианты", callback_data="done")
|
||||
],
|
||||
|
||||
])
|
||||
|
|
@ -1,8 +1,11 @@
|
|||
from aiogram import Bot, Dispatcher, types
|
||||
from aiogram.contrib.fsm_storage.memory import MemoryStorage
|
||||
|
||||
|
||||
from data import config
|
||||
from utils.db_api.sqlite import Database
|
||||
|
||||
bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
|
||||
storage = MemoryStorage()
|
||||
dp = Dispatcher(bot, storage=storage)
|
||||
db = Database(path_to_db="data/main.db")
|
||||
|
|
BIN
photos/credit_image/Miloan.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
photos/credit_image/bistro_dengi.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
photos/credit_image/credit1.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
photos/credit_image/credit2.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
photos/credit_image/evrogroshi.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
photos/credit_image/zecreditor.jpg
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
photos/loading1.jpg
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
photos/loading2.jpg
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
photos/photo1.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
photos/photo2.jpg
Normal file
After Width: | Height: | Size: 67 KiB |
99
utils/db_api/sqlite.py
Normal file
|
@ -0,0 +1,99 @@
|
|||
import sqlite3
|
||||
|
||||
|
||||
class Database:
|
||||
def __init__(self, path_to_db="main.db"):
|
||||
self.path_to_db = path_to_db
|
||||
|
||||
@property
|
||||
def connection(self):
|
||||
return sqlite3.connect(self.path_to_db)
|
||||
|
||||
def execute(self, sql: str, parameters: tuple = None, fetchone=False, fetchall=False, commit=False):
|
||||
if not parameters:
|
||||
parameters = ()
|
||||
connection = self.connection
|
||||
connection.set_trace_callback(logger)
|
||||
cursor = connection.cursor()
|
||||
data = None
|
||||
cursor.execute(sql, parameters)
|
||||
|
||||
if commit:
|
||||
connection.commit()
|
||||
if fetchall:
|
||||
data = cursor.fetchall()
|
||||
if fetchone:
|
||||
data = cursor.fetchone()
|
||||
connection.close()
|
||||
return data
|
||||
|
||||
def create_table_users(self):
|
||||
sql = """
|
||||
CREATE TABLE Users (
|
||||
id int NOT NULL,
|
||||
Name varchar(255) NOT NULL,
|
||||
email varchar(255),
|
||||
age varchar(50),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
"""
|
||||
self.execute(sql, commit=True)
|
||||
|
||||
@staticmethod
|
||||
def format_args(sql, parameters: dict):
|
||||
sql += " AND ".join([
|
||||
f"{item} = ?" for item in parameters
|
||||
])
|
||||
return sql, tuple(parameters.values())
|
||||
|
||||
def add_user(self, id: int, name: str, email: str = None, age: str = None):
|
||||
# SQL_EXAMPLE = "INSERT INTO Users(id, Name, email) VALUES(1, 'John', 'John@gmail.com')"
|
||||
|
||||
sql = """
|
||||
INSERT INTO Users(id, Name, email, age) VALUES(?, ?, ?, ?)
|
||||
"""
|
||||
self.execute(sql, parameters=(id, name, email, age), commit=True)
|
||||
|
||||
def select_all_users(self):
|
||||
sql = """
|
||||
SELECT * FROM Users
|
||||
"""
|
||||
return self.execute(sql, fetchall=True)
|
||||
|
||||
def select_user(self, **kwargs):
|
||||
# SQL_EXAMPLE = "SELECT * FROM Users where id=1 AND Name='John'"
|
||||
sql = "SELECT * FROM Users WHERE "
|
||||
sql, parameters = self.format_args(sql, kwargs)
|
||||
|
||||
return self.execute(sql, parameters=parameters, fetchone=True)
|
||||
|
||||
|
||||
def count_users(self):
|
||||
return self.execute("SELECT COUNT(*) FROM Users;", fetchone=True)
|
||||
|
||||
def update_user_email(self, email, id):
|
||||
# SQL_EXAMPLE = "UPDATE Users SET email=mail@gmail.com WHERE id=12345"
|
||||
|
||||
sql = f"""
|
||||
UPDATE Users SET email=? WHERE id=?
|
||||
"""
|
||||
return self.execute(sql, parameters=(email, id), commit=True)
|
||||
|
||||
def update_user_age(self, age, id):
|
||||
sql = f"""
|
||||
UPDATE Users SET age=? WHERE id=?
|
||||
"""
|
||||
return self.execute(sql, parameters=(age, id), commit=True)
|
||||
|
||||
|
||||
def delete_users(self):
|
||||
self.execute("DELETE FROM Users WHERE TRUE", commit=True)
|
||||
|
||||
|
||||
def logger(statement):
|
||||
print(f"""
|
||||
_____________________________________________________
|
||||
Executing:
|
||||
{statement}
|
||||
_____________________________________________________
|
||||
""")
|
6
utils/db_api/test.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from utils.db_api.sqlite import Database
|
||||
|
||||
db = Database()
|
||||
|
||||
def test():
|
||||
|