SQLAlchemy normally presents a many-to-many relationship as a list on both sides. You've got "Machine.children", which is a list of Options, and "Option.parents", which is a list of Machines.
If you remove one of the options from a machine.children list, you'll find that SQLAlchemy removes the entry from the association table. Something like this: machine.children.remove(option_to_remove) However, this does have the downside that when you access "machine.children", SQLAlchemy will load all the Options for that Machine from the database. This is a waste of effort if you are only trying to delete one of them. (But if you've got them loaded anyway, it doesn't matter) The other option is to delete the row explicitly, something like this: statement = Machine_Options.delete().where( Machine_Options.c.machine_FK == machine.machine_ID, Machine_Options.c.options_FK == option.option_ID ) session.execute(statement) But beware that if you do this, any machines or options already loaded in your session won't be aware that the delete happened. If they had already loaded their "parents" or "children" relationships, that cached data will not match what is in the database. Hope that helps, Simon On Wed, Aug 12, 2020 at 3:05 AM William Phillips <liamdale...@gmail.com> wrote: > > For the sake of completeness I am including the code to disconnect an option > from a machine using only python/SQLite code. > > def removeOption(bladeKey, OptionKey): > > """ > DELETE from blade_options > WHERE blade_FK == ? > AND options_FK == ? > """ > import sqlite3 > dbPath = config.database_path > sqliteConnection = sqlite3.connect(dbPath) > cursor = sqliteConnection.cursor() > sql = 'DELETE from blade_options WHERE blades_ID == ? AND options_ID == > ?; ' > cursor.execute(sql, (bladeKey, OptionKey, )) > sqliteConnection.commit() > sqliteConnection.close() > return > > -- > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/45da4231-3550-4f5b-882e-9e61bef86bd5o%40googlegroups.com. -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/CAFHwexdhhOPgkXi8owvS0t1hXE68zZYf9kam_MOYZ6PpjCe4Ew%40mail.gmail.com.