python - example - Postgresql-Insertar en donde no existe usando INSERT de sqlalchemy de SELECT
sqlalchemy relationship (1)
Como se señala aquí, es posible hacer lo siguiente con postgresql 9.1+
INSERT INTO example_table
(id, name)
SELECT 1, ''John''
WHERE
NOT EXISTS (
SELECT id FROM example_table WHERE id = 1
);
He estado jugando con la versión 0.9 de sqlalchemy, donde han introducido INSERT desde el método SELECT que teóricamente debería manejar lo anterior.
¿Es posible y si es así cómo? (como quiero aprovechar el result.inserted_primary_key que no se devuelve cuando se utiliza sql en bruto)
¿Cómo puedo usar bindparams para la parte ''from_select'' ya que la única forma en que puedo parecer que lo uso es cuando uso columnas de tabla en la selección.
p.ej
insrt = example_table.insert().
from_select([''id'', ''name''],
example_table.select().
where(~exists(select([example_table.c.id],
example_table.c.id == 1))))
result = session.execute(insrt)
if result.is_insert:
print ''do something with result.inserted_primary_key''
from sqlalchemy import *
"""
INSERT INTO example_table
(id, name)
SELECT 1, ''John''
WHERE
NOT EXISTS (
SELECT id FROM example_table WHERE id = 1
);
"""
m = MetaData()
example_table = Table("example_table", m,
Column(''id'', Integer),
Column(''name'', String)
)
sel = select([literal("1"), literal("John")]).where(
~exists([example_table.c.id]).where(example_table.c.id == 1)
)
ins = example_table.insert().from_select(["id", "name"], sel)
print(ins)
salida:
INSERT INTO example_table (id, name) SELECT :param_1 AS anon_1, :param_2 AS anon_2
WHERE NOT (EXISTS (SELECT example_table.id
FROM example_table
WHERE example_table.id = :id_1))