使用SQLAlchemy将数据批量加载到具有外键的postgreSQL表中
我在PostgreSQL/SQLAlchemy中有以下代码使用SQLAlchemy将数据批量加载到具有外键的postgreSQL表中,postgresql,sqlalchemy,Postgresql,Sqlalchemy,我在PostgreSQL/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 =
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))
在这里,我不希望将记录插入到表中,只希望与主表中的现有记录建立关系。有什么办法可以做到这一点吗?在for-loop中检查
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)
非常感谢。我得到了答案。通过实例变量从主表查询行,然后从实例访问主键(id)。把它当作关系
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)