Добрый день!
Я использую psycopg и sqlalchemy для вставки и возврата запроса.
Я успешно вставил и вернулся, но окольным путем.
Я вставляю данные и возврат значений во временную таблицу, а затем выбор значений во временной таблице, как показано ниже.
from sqlalchemy.engine import create_engine
from sqlalchemy import text
from sqlalchemy import bindparam
import psycopg
def makePgEngine():
global pgEngine
pgEngine = create_engine("postgresql+psycopg://postgres:postgres@localhost:5412/postgres")
def insert_into_returning():
makePgEngine()
sql_text = "with r as (insert into public.numeric_data_source (x_field,y_field,z_field)values(:x_field,:y_field,:z_field) returning x_field, y_field, z_field) insert into temp_numeric_data_source (x_field, y_field, z_field)select x_field, y_field, z_field from r"
qry =text(sql_text).bindparams(
bindparam('x_field'),
bindparam('y_field'),
bindparam('z_field')
)
params=({'x_field':-99,'y_field':-98,'z_field':-97},
{'x_field':-98,'y_field':-97,'z_field':-96},
{'x_field':-97,'y_field':-96,'z_field':-95})
with pgEngine.connect() as con:
con.execute(text("truncate table public.numeric_data_source"))
con.execute(text("create temp table temp_numeric_data_source as select x_field, y_field, z_field from public.numeric_data_source"))
con.execute(qry, params)
data=con.execute(text("select * from temp_numeric_data_source"))
print(data.fetchall())
con.commit()
Можно ли как-нибудь обойти использование временной таблицы? Я хотел бы сохранить использование текстового объекта в sqlalchemy. Спасибо за вашу помощь.
Добрый день! Я использую psycopg и sqlalchemy для вставки и возврата запроса. Я успешно вставил и вернулся, но окольным путем. Я вставляю данные и возврат значений во временную таблицу, а затем выбор значений во временной таблице, как показано ниже. [code]from sqlalchemy.engine import create_engine from sqlalchemy import text from sqlalchemy import bindparam import psycopg
def makePgEngine(): global pgEngine pgEngine = create_engine("postgresql+psycopg://postgres:postgres@localhost:5412/postgres")
def insert_into_returning(): makePgEngine() sql_text = "with r as (insert into public.numeric_data_source (x_field,y_field,z_field)values(:x_field,:y_field,:z_field) returning x_field, y_field, z_field) insert into temp_numeric_data_source (x_field, y_field, z_field)select x_field, y_field, z_field from r" qry =text(sql_text).bindparams( bindparam('x_field'), bindparam('y_field'), bindparam('z_field') ) params=({'x_field':-99,'y_field':-98,'z_field':-97}, {'x_field':-98,'y_field':-97,'z_field':-96}, {'x_field':-97,'y_field':-96,'z_field':-95}) with pgEngine.connect() as con: con.execute(text("truncate table public.numeric_data_source")) con.execute(text("create temp table temp_numeric_data_source as select x_field, y_field, z_field from public.numeric_data_source")) con.execute(qry, params) data=con.execute(text("select * from temp_numeric_data_source")) print(data.fetchall()) con.commit() [/code] Можно ли как-нибудь обойти использование временной таблицы? Я хотел бы сохранить использование текстового объекта в sqlalchemy. Спасибо за вашу помощь.