Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQLAlchemy将数据批量加载到具有外键的postgreSQL表中_Postgresql_Sqlalchemy - Fatal编程技术网

使用SQLAlchemy将数据批量加载到具有外键的postgreSQL表中

使用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 =

我在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 = 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)