繁体   English   中英

使用来自 sqlalchemy 的 plpg-sql 执行 postgresql 查询

[英]Executing a postgresql query with plpg-sql from sqlalchemy

在原始 SQL 中找不到使用 plpg-sql 的示例,由 sqlAlchemy 执行,这些是最接近的但没有 plpg-sql:

如何在 Flask-SQLAlchemy 应用程序中执行原始 SQL
如何在 sqlalchemy.engine.Connection 中设置 autocommit = 1

我已经做过研究,我不确定这是否可能。 我正在尝试插入或更新记录并且没有错误。 它必须静默失败,因为数据库中没有创建/更新记录,并且我已明确设置AutoCommit=True

Python:

engine = db.create_engine(connstr, pool_size=20, max_overflow=0)
Session = scoped_session(sessionmaker(bind=engine, autocommit=True))
s = Session()

query = """DO $$
declare
ppllastActivity date;
percComplete numeric;
begin
select lastactivity into ppllastActivity FROM feeds WHERE email = :e and courseName=:c and provider = :prov;
IF COALESCE (ppllastActivity, '1900-01-01') = '1900-01-01' THEN
INSERT INTO feeds (email, courseName, completedratio, lastActivity, provider) VALUES (:e, :c, :p, :l, :prov);
ELSEIF ppllastActivity < :l THEN
UPDATE feeds set completedratio = :p,lastActivity = :l WHERE email = :e and courseName = :c and provider = :prov;
END if;
end; $$"""

params = {'e' : item.get('email').replace("'", "''").lower(), 'c' : item.get('courseName').replace("'", "''"), 'p' : item.get('progress'), 'l' : item.get('lastActivity'),'prov' : "ACG" }
result = s.execute(text(query),params)

我无法排除故障,因为它没有给我任何错误。 我走错路了吗? 我应该只使用psql.exe还是可以在原始 SQL 和 sqlAlchemy 中执行 plpg-sql?

在输入这个问题时,我找到了解决方案或错误。

automcommit=True不起作用,您必须开始事务:

with s.begin():
     result = s.execute(text(query),params)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM