Как правильно вывести данные из связанной таблицы? (Gino, PostgreSQL)
Подскажите, пожалуйста, как правильно связать таблицы ниже для корректного вывода данных?
Я пытаюсь для каждого юзера найти случайную пару среди всех юзеров в таблице User для дальнейшей отправки ему данных (фио,номер и пр.) по партнёру.
Для этого я написала функцию, в которой из основной таблицы User user_id отправляются в таблицы Random_user и Random_user2 по признаку четности.
Есть три таблицы:
- User
- Random_user
- Random_user2
class User(TimedBaseModel):
__tablename__ = 'users'
user_id = Column(BigInteger, primary_key = True)
first_name = Column(String(200))
last_name = Column(String(200))
user_name = Column(String(50))
status = Column(String(30))
number = Column(String(10))
class Random_user2(BaseModel):
__tablename__ = 'random_user2'
random_id = db.Column(db.Integer, primary_key=True)
user_id_1 = db.Column(db.Integer, db.ForeignKey(User.user_id))
class Random_user(BaseModel):
__tablename__ = 'random_user'
random_id = db.Column(db.Integer, primary_key=True)
user_id_2 = db.Column(db.Integer, db.ForeignKey(User.user_id))
Тестовый блок отправки сообщения юзерам ниже:
async def send_message_interval_random3(bot: Bot):
random_users = await commands.select_all_random_users()
random_users_couple = await commands.select_all_random_users_couple()
for user in random_users, random_users_couple:
try:
text = (f'Твоя пара: {random_users_couple.user_id_1}')
await dp.bot.send_message(chat_id=user.user_id_2, text=text)
except Exception:
for user_id in admins_id:
text = ('Произошла ошибка при рассылке пар...')
await dp.bot.send_message(chat_id=user_id, text=text)
Вызовы всех юзеров в таблицах Random_user и Random_user2:
async def select_all_random_users():
random_users = await Random_user.query.gino.all()
return random_users
async def select_all_random_users_couple():
random_users_couple = await Random_user2.query.gino.all()
return random_users_couple
Я ожидаю вывод данных из таблицы User для каждого юзера-пары и отправку этих данных другому юзеру.
Подскажите, пожалуйста, каким способом это лучше сделать?
