Таблица:
class Person(Base):
__tablename__ = 'person'
id = Column('id', Integer, primary_key=True)
gender = Column(String)
name = relationship("Name", uselist=False, back_populates="person")
location = relationship("Location", uselist=False, back_populates="person")
email = Column(String)
login = relationship("Login", uselist=False, back_populates="person")
dob = relationship("Dob", uselist=False, back_populates="person")
registered = relationship("Registered", uselist=False, back_populates="person")
phone = Column(String)
cell = Column(String)
id_person = relationship("IdPerson", uselist=False, back_populates="person")
nat = Column(String)
def __repr__(self):
return f'(id:{self.id}, gender:{self.name})'
У меня есть JSON файл, содержащий 1000 строк данные о людях (и двойные и тройные вложенные «таблицы»).
I создал функцию, которая создает списки, например. пол из файла JSON. Я создал функцию, которая вставляет данные из этого списка в db.
def bulk_save_obj_gender():
index = 0
persons_gender = []
for element in range(count_indexes()):
per = Person(gender=all_genders[index])
persons_gender.append(per)
index += 1
session.bulk_save_objects(persons_gender, return_defaults=True)
for gender in persons_gender:
assert gender.id is not None
session.add_all(persons_gender)
session.commit()
def bulk_save_obj_email():
index = 0
persons_emails = []
for element in range(count_indexes()):
per = Person(email=all_emails[index])
persons_emails.append(per)
index += 1
session.bulk_save_objects(persons_emails, return_defaults=True)
for email in persons_emails:
assert email.id is not None
session.add_all(persons_emails)
session.commit()
, и что я вижу в * .db, так это то, что у меня есть 1-1000 идентификаторов полов (и столбец электронных писем NULL) и 1001 -2000 идентификаторов писем.
Интересно, как создать функцию, которая вставляет эти письма в существующий идентификатор от 1 до 2000. Чтобы связать пол и электронные письма по их идентификатору.
Я не конечно, я могу это хорошо описать.
screenshot-of-db
Когда я изменил код на простой SQL запрос, он отлично работает:
def populate_data_using_sqlite_query():
conn = sqlite3.connect('persons.db')
c = conn.cursor()
for i in range(count_indexes()):
gend = all_genders[i]
email = all_emails[i]
params = (i, gend, email)
c.execute("INSERT INTO person (id, gender, email) VALUES (?,?,?)", params)
conn.commit()
populate_data_using_sqlite_query()
но я действительно хочу сделать это с помощью ORM.
Пожалуйста, помогите :)