ImportError: cannot import name 'db' from partially initialized module 'db_gino' (most likely due to a circular import) (D:\python\db_gino.py)

from aiogram.utils import executor
from aiogram import Bot, Dispatcher, types
import random
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
import asyncio
import os
from dotenv import load_dotenv
import quick_commands
from db_gino import db

load_dotenv()

TOKEN = "5565651631:AAE3eeblp24pDy0t-6Kea6HQ2CwJtrYj2io"


async def on_startup(_):
    print('Bot online...')


proxy_url = "http://proxy.server:3128"
bot = Bot(token=TOKEN)  # , proxy=proxy_url)
dp = Dispatcher(bot, storage=MemoryStorage())

ip = os.getenv('ip')
PGUSER = str(os.getenv('PGUSER'))
PGPASSWORD = str(os.getenv('PGPASSWORD'))
DATABASE = str(os.getenv('DATABASE'))

POSTGRES_URI = f'postgresql://{PGUSER}:{PGPASSWORD}@{ip}/{DATABASE}'

tms = 10
tms1 = 1
timer_seconds = int(0)


import user


@dp.message_handler(commands='reg')
async def registersql(message: types.Message):
    try:
        user = await quick_commands.select_user(message.from_user.id)
        if user.status == 'active':
            await message.answer(f"Привет! {user.first_name}\n"
                                 f"Ты уже зарегистрирован!")
        elif user.status == 'baned':
            await message.answer("Ты в бане")
    except Exception:
        await quick_commands.add_user(user_id=message.from_user.id,
                                      first_name=message.from_user.first_name,
                                      last_name=message.from_user.last_name,
                                      username=message.from_user.username,
                                      status='active')
        await message.answer('Ты зарегистрирован!')


@dp.message_handler(commands='ban')
async def ban(message: types.Message):
    await quick_commands.update_status('baned')
    await message.answer("Вас заблокировали!")


@dp.message_handler(commands='ban')
async def ban(message: types.Message):
    await quick_commands.update_status('active')
    await message.answer("Вас разблокировали!")

async def new_timer_message(message):
    global timer_seconds
    try:
        timer_seconds

    except (TypeError, ValueError):
        pass

    new_message = await bot.send_message(message.chat.id, f"До следущего получения бонуса: {timer_seconds} минут")

    for seconds_left in range(timer_seconds - 1, -1, -1):
        await asyncio.sleep(60)
        await new_message.edit_text(f"До следущего получения бонуса: {seconds_left} минут")
        timer_seconds -= tms1


class Form(StatesGroup):
    Amount = State()


#async def bonus(user_id: int, amountt=5000):
#    user = await quick_commands.select_user(user_id=user_id)
#    new_balance = user.balance + amountt
#    await user.update(balance=new_balance).apply()


balance = 5000


@dp.message_handler(commands="bonus")
async def command_bonus(message: types.Message):
    global timer_seconds, tms
    if timer_seconds == 0:
        await bot.send_message(message.chat.id, "+5000")
        timer_seconds += tms
        await new_timer_message(message)


@dp.message_handler(commands="balance")
async def command_all(message: types.Message):
    #user = await quick_commands.select_user(user_id=)
    await message.reply(f"Баланс = {user.balance}")


@dp.message_handler(commands='playy')
async def cmd_start(message: types.Message):
    await Form.Amount.set()
    await message.reply("Сделайте ставку")


@dp.message_handler(lambda message: not message.text.isdigit(), state=Form.Amount)
async def process_amount_invalid(message: types.Message):
    await message.reply("Сделай ставку цифрами!")


@dp.message_handler(state=Form.Amount)
async def process_name(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        global balance
        data['Amount'] = message.text
        ran = random.randint(0, 1)
        if balance > int(data['Amount']):
            if int(str(data['Amount'])) > 0:
                if ran != 1:
                    await message.reply("Вы проиграли -" + str(data['Amount']))
                    balance -= int(str(data['Amount']))
                else:
                    await message.reply("Вы выиграли! +" + str(data['Amount']))
                    balance += int(str(data['Amount']))
            else:
                await message.reply("Отрицательная ставка?")
        else:
            await message.reply("Недостаточно средств")
        await state.finish()


async def on_startup(dp):
    import filters
    filters.setup(dp)

    from db_gino import on_startup

    print("Подключение к базе данных")
    await on_startup(dp)

    print("Удаление старых таблиц")
    await db.gino.drop_all()

    print("Создание таблиц")
    await db.gino.create_all()
    print("Успешно!")

if __name__ == "__main__":
    executor.start_polling(dp, on_startup=on_startup)

ошибка

Traceback (most recent call last):
  File "D:\python\balance.py", line 10, in <module>
    import quick_commands
  File "D:\python\quick_commands.py", line 3, in <module>
    from db_gino import db
  File "D:\python\db_gino.py", line 7, in <module>
    import balance
  File "D:\python\balance.py", line 11, in <module>
    from db_gino import db
ImportError: cannot import name 'db' from partially initialized module 'db_gino' (most likely due to a circular import) (D:\python\db_gino.py)

Ответы (0 шт):