Size: a a a

2020 September 01

DS

David Shiko in SPb Python
Denis S
Этот запрос выводит данные. Где здесь информация о мета структуре таблицы?
Сама вставка

def create_user(db: Session, user: schemas.UserCreate):
   db_user_data = models.UserData()
   db_user_meta = models.UserMeta(email=user.email)
   db.add(db_user_data)
   db.add(db_user_meta)
   db.commit()
   db.refresh(db_user_data)
   db.refresh(db_user_meta)
   res = db_user_data, db_user_meta
   return True  # What to return ?
источник

DS

Denis S in SPb Python
источник

DS

Denis S in SPb Python
Должно быть что-то типа этого
источник

DS

Denis S in SPb Python
В зависимости от вида базы данных (мускул/постгре/...)
источник

DS

David Shiko in SPb Python
Постгрес. Сейчас найду
источник

DS

David Shiko in SPb Python
Denis S
Должно быть что-то типа этого
test_db=# \d users_data
                                  Table "public.users_data"
  Column   |       Type        | Collation | Nullable |                Default                
------------+-------------------+-----------+----------+----------------------------------------
id         | integer           |           | not null | nextval('users_data_id_seq'::regclass)
Indexes:
   "users_data_pkey" PRIMARY KEY, btree (id)
   "ix_users_data_id" btree (id)
Referenced by:
   TABLE "users_meta" CONSTRAINT "users_meta_user_data_id_fkey" FOREIGN KEY (user_data_id) REFERENCES users_data(id)
источник

DS

Denis S in SPb Python
Судя по мете все нормально. Автоинкремент не вставляет?
источник

DS

David Shiko in SPb Python
Denis S
Должно быть что-то типа этого
test_db-# \d users_meta;
                                        Table "public.users_meta"
    Column      |           Type           | Collation | Nullable |                Default                
-----------------+--------------------------+-----------+----------+----------------------------------------
id              | integer                  |           | not null | nextval('users_meta_id_seq'::regclass)
email           | character varying        |           |          |
user_data_id    | integer                  |           |          |
Indexes:
   "users_meta_pkey" PRIMARY KEY, btree (id)
   "ix_users_meta_email" UNIQUE, btree (email)
Foreign-key constraints:
   "users_meta_user_data_id_fkey" FOREIGN KEY (user_data_id) REFERENCES users_data(id)
источник

KM

Kristina Mironova in SPb Python
David Shiko
Всем привет. Скажите пожалуйста должно ли здесь поле user_data_id заполняться автоматически? Я хочу связять эти таблицы без 3-ей вспомогательной таблицы.

class UserData(Base):
   __tablename__ = "users_data"

   id = Column(Integer, primary_key=True, index=True)
   users_meta = relationship("UserMeta", uselist=False, back_populates="users_data")


class UserMeta(Base):
   __tablename__ = "users_meta"

   id = Column(Integer, primary_key=True)
   email = Column(String, unique=True, index=True)
   user_data_id = Column(Integer, ForeignKey('users_data.id'))
   users_data = relationship("UserData", back_populates="users_meta")
привет.
а в таблице ЮзерДата ты получаешь айдишник при создании новой записи? Запись создается?
источник

DS

David Shiko in SPb Python
Kristina Mironova
привет.
а в таблице ЮзерДата ты получаешь айдишник при создании новой записи? Запись создается?
Да, автоинкремент  id происходит сам, это видно из crud (выложил выше)
источник

DS

Denis S in SPb Python
David Shiko
Да, автоинкремент  id происходит сам, это видно из crud (выложил выше)
А в чем вопрос тогда? 😬
источник

DS

David Shiko in SPb Python
Denis S
А в чем вопрос тогда? 😬
Мне надо сделать соответствие, что бы я мог по юзеру из users_data найти юзера в users_meta
источник

DS

David Shiko in SPb Python
Denis S
А в чем вопрос тогда? 😬
автоинкремент у полей id в таблицах users_data и users_meta, но не у поля user_data_id в таблице user_meta
источник

DS

Denis S in SPb Python
Тебе нужно: 1. создать user. 2 Получить его id от базы данных.
источник

DS

Denis S in SPb Python
3. При записи в user_meta использовать user_id из шага 2
источник

DS

David Shiko in SPb Python
Denis S
Тебе нужно: 1. создать user. 2 Получить его id от базы данных.
Я понимаю, что при одновременной вставке поля id у users_data и users_meta должны совпадать, но это не жестко задано, если будет асинхронный доступ, то все сломается, т.к. между этими записями может вклиниться запись другого юзера
источник

DS

Denis S in SPb Python
Ого, так вопрос в итоге в асинхронке :)
источник

DS

Denis S in SPb Python
Какую библиотеку используешь?
источник

DS

David Shiko in SPb Python
Denis S
Ого, так вопрос в итоге в асинхронке :)
Ну даже без нее риск есть. Дожен быть какой то еще вид связи, более надежный)
источник

DS

David Shiko in SPb Python
Denis S
Какую библиотеку используешь?
sqlalchemy
источник