Thank you so much for this detailed response. I really appreciate it, the explanation and example really furthered my understanding and where I was going wrong.
On Sunday, September 23, 2018 at 9:05:36 PM UTC+1, Ioannes wrote: > > Hi all, > > I had originally asked a question here: > https://stackoverflow.com/questions/52391072/creating-and-appending-to-a-list-in-sqlalchemy-database-table/52391339#52391339. > > However as I am still really stuck, I thought asking to a group more > specifically focussed on SQLAlchemy would be better. > > I have a table in the database (see below for test file going into > table).The table has two fields, name (the latin name e.g. homo sapiens) > and other names (the common names e.g. human, man). I want to update a > field (other names) in the table, so instead of having: > > Rana rugosa human Rana rugosa man Rana rugosa frog Rana rugosa cow > > In the database table, It will return this: > > Rana rugosa human,man,frog,cow > > The test_data file looks like this: > > origin_organism common_name tested_organismRana rugosa > human -Rana rugosa man -Rana > rugosa frog homo sapiensRana rugosa cow > Rana rugosaRana rugosa frog Rana > rugosaRana rugosa frog -Rana rugosa > frog -Rana rugosa frog homo > sapiens- - -- > - homo sapiens- - > -- - > -- - -- > - - > streptococcus pneumoniae - - > > The code: > > import sys from sqlalchemy.orm import * from sqlalchemy import * from > dbn.sqlalchemy_module import lib import pd > > engine = lib.get_engine(user="user", psw="pwd", db="db", > db_host="111.111.111.11")Base = lib.get_automapped_base(engine) > session = Session(engine) > tbs = lib.get_mapped_classes(Base) > session.rollback() > df = pd.read_excel('test_data.xlsx', sheet_name = 'test2') > > > > for index, row in df.iterrows(): > origin_latin_name = row['origin_organism'].strip().lower() > other_names_name = row['common_name'].strip().lower() > tested_species = row['tested_organism'].strip().lower() > > if origin_latin_name not in [None, "None", "", "-"]: > instance = [x[0] for x in > Session.query(session,tbs['species'].name).filter_by(name=origin_latin_name).all()] > if origin_latin_name not in instance: > origin_species = lib.get_or_create( > session, > tbs["species"], > name = origin_latin_name, > other_names = other_names_name > ) > > elif origin_latin_name in instance: > other_names_query = > Session.query(session,tbs['species'].other_names).filter_by(name=origin_latin_name) > other_names_query_list = [x for x in other_names_query] > original_list2 = list(set([y for y in x[0].split(',') for x in > other_names_query_list])) > if other_names_name not in original_list2: > original_list2.append(other_names_name) > new_list = ','.join(original_list2) > new_names = {'other_names':','.join(original_list2)} > > origin_species = lib.get_or_create( > session, > tbs["species"], > name = origin_latin_name, > other_names = new_list > ) > > The part from the elif statement doesn't work. I've ran into two problems: > > (1) The most recent error I got: NameError: name 'new_list' is not defined > > (2) another error I got is that I have another table further on > > map1 = lib.get_or_create( > session, > tbs["map1"], > age_id_id = age, >> >> name_id_id = origin_species.id >> > > ) > > ...and it said that origin_species object cannot be found, but I think > this is linked to the elif statement, that somehow the origin_species > object is not being updated properly. > > If anyone could help I would appreciate it. > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.