2017-02-07 9 views
0

У меня есть следующий код в PostgreSQL/SQLAlchemy.Загрузка данных навалом в таблицу postgreSQL, которая имеет ForeignKey с использованием SQLAlchemy

def load_books(): 
with open('C:\\Users\\books_raw.csv', 'r') as file: 
    for line in file.readlines(): 
     record = line.split('$') # split at delimiter 

     book_isbn = record[0].strip('"') 
     book_title = record[1] 
     book_authors = record[2] 
     book_avg_rating = record[2] 
     book_format = record[4] 
     book_img_url = record[5] 
     book_num_pages = record[6] 
     book_pub_date = record[7] 
     book_publisher = record[8].strip() # ESTABLISH RELATIONSHIP 

     book = Books(title=book_title, isbn=book_isbn, authors=book_authors, avg_rating=book_avg_rating, format=book_format, 
        img_url=book_img_url, num_pages=book_num_pages, pub_date=book_pub_date, publisher=Publication(name=book_publisher)) 
     session.add(book) 

session.commit() 
count = session.query(Books).count() 
print(count, ' books added to the database') 

Моя проблема была связана с отношениями. Если вы видите эту часть кода:

publisher=Publication(name=book_publisher)) 

здесь я не хочу, запись будет вставлена ​​в таблицу, а просто установить связь с существующей записью в главной таблице. Любые идеи, как я могу это достичь?

ответ

0

В для проверки цикла, если publisher в БД или нет, если не в БД, то можно создать новый и сохранить книгу с этим издателем:

for line in file.readlines(): 
    ... 
    publisher=Publication.query.filter(name=book_publisher).first() 
    if not publisher: 
     publisher=Publication(name=book_publisher) 
    book = Books(..., publisher=publisher) 
+0

спасибо. Я получил ответ. запросил строку из основной таблицы через переменную экземпляра, а затем обратился к первому_имя (id) из экземпляра. использовал это как отношение – Hara

0
r = session.query(Publication).filter(Publication.name == book_publisher).first() 

     book = Books(title=book_title, isbn=book_isbn, authors=book_authors, avg_rating=book_avg_rating, format=book_format, 
        img_url=book_img_url, num_pages=book_num_pages, pub_date=book_pub_date, pub_id=r.id) 
     session.add(book) 

 Смежные вопросы

  • Нет связанных вопросов^_^