Insertar y actualizar con core SQLAlchemy

Tengo una base de datos para la que no tengo metadatos u clases de orm (la base de datos ya existe).

Me las arreglé para conseguir el trabajo seleccionado por:

from sqlalchemy.sql.expression import ColumnClause from sqlalchemy.sql import table, column, select, update, insert from sqlalchemy.ext.declarative import * from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine import pyodbc db = create_engine('mssql+pyodbc://pytest') Session = sessionmaker(bind=db) session = Session() list = [] list.append (column("field1")) list.append (column("field2")) list.append (column("field3")) s = select(list) s.append_from('table') s.append_whereclause("field1 = 'abc'") s = s.limit(10) result = session.execute(s) out = result.fetchall() print(out) 

Hasta ahora tan bueno.

La única forma en que puedo obtener un trabajo de actualización / inserción es mediante la ejecución de una consulta sin formato como:

 session.execute() 

Me gustaría hacerlo para poder hacer una clase de eso como:

 u = Update("table") u.Set("file1","some value") u.Where() seasion.execute(u) 

Intentado (este es solo uno de los enfoques que probé):

 i = insert("table") v = i.values([{"name":"name1"}, {"name":"name2"}]) u = update("table") u = u.values({"name": "test1"}) 

No puedo conseguir que se ejecute:

 session.execute(i) 

o

 session.execute(u) 

¿Alguna sugerencia sobre cómo construir una inserción o actualización sin escribir modelos ORM?

Como puede ver en la documentación de SQLAlchemy Overview , sqlalchemy se construye con dos capas: ORM y Core . Actualmente estás usando solo algunas construcciones del Core y construyendo todo manualmente.

Para poder utilizar Core , debe informar a SQLAlchemy sobre alguna metainformación sobre su base de datos para que pueda operar en ella. Suponiendo que tiene una tabla mytable con las columnas field1, field2, field3 y una primary key definida, el siguiente código debe realizar todas las tareas que necesita:

 from sqlalchemy.sql import table, column, select, update, insert # define meta information metadata = MetaData(bind=engine) mytable = Table('mytable', metadata, autoload=True) # select s = mytable.select() # or: #s = select([mytable]) # or (if only certain columns): #s = select([mytable.c.field1, mytable.c.field2, mytable.c.field3]) s = s.where(mytable.c.field1 == 'abc') result = session.execute(s) out = result.fetchall() print(out) # insert i = insert(mytable) i = i.values({"field1": "value1", "field2": "value2"}) session.execute(i) # update u = update(mytable) u = u.values({"field3": "new_value"}) u = u.where(mytable.c.id == 33) session.execute(u)