Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!

Как мне выполнить sql запрос?

Я писал программу и нужно было создать таблицу множество к множеству, получилось следующее:

class Moneys(Base):
   def __init__(self):
      super().__init__()
      self.name: str = "moneys"
      self.init()

   def init(self):
      with self.conn:
         self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS {self.name} (
                             id INTEGER PRIMARY KEY AUTOINCREMENT,
                             user_id INTEGER,
                             post_id INTEGER,
                             money INTEGER DEFAULT 0,
                             FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
                             FOREIGN KEY(post_id) REFERENCES posts(id) ON DELETE CASCADE
         )""")

class Users(Base):
   def __init__(self):
      super().__init__()
      self.name: str = "users"
      self.init()

   def init(self):
      with self.conn:
         self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS {self.name} (
                             id INTEGER PRIMARY KEY AUTOINCREMENT,
                             firstname VARCHAR(64) NOT NULL,
                             lastname VARCHAR(64) NOT NULL
                              )""")

class Posts(Base):
   def __init__(self):
      super().__init__()
      self.curr_id:   bool | int  = False
      self.curr_post: bool | dict = False
      self.name:      str         = "posts"
      self.init()

   def init(self):
      with self.conn:
         self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS {self.name} (
                             id INTEGER PRIMARY KEY AUTOINCREMENT,
                             title VARCHAR(20) NOT NULL,
                             money_id INTEGER,
                             FOREIGN KEY(money_id) REFERENCES moneys(id) ON DELETE CASCADE
         )""")


Мне нужно создать новый Post, но как мне это сделать, если мне нужно в бд: Posts указать money_id, а в бд: Moneys указать post_id?
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Необходимо создать третью таблицу, соединительную Moneys-Posts, в которой каждой такой реальной паре соответствует уникальная запись money_id - post_id. Это вы можете прочесть в ЛЮБОЙ книге по SQL.
И совершенно ни к чему тут тэг python, он никакого отношения к сути вопроса не имеет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
У тебя криво спроектированы таблицы. Реши для начала, кто ведущий, а кто ведомый в отношении Post-Money.
Ведомый хранит ссылку на своего ведущего, но не наоборот.
Если у тебя и впрямь просто реализуется связь многие ко многим, то связная таблица должна хранить ссылки на связываемые, но не наоборот.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы