如何在SQLAlchemy中声明一个Postgres函数?

3

我正在使用Flask-SQLAlchemy,我的表/模型结构如下:

class TableName (db.Model):
    columnname = db.Column(db.String)

如何在SQLAlchemy中添加Postgres自定义函数?
我指的是像这样的一个函数:
create function canonicalize (text) returns text as $$
  select $1;
$$ language sql;
1个回答

1
你可以使用sqlalchemy的text()函数来生成Postgresql的函数,也就是存储过程。
我在postgresql 14和python库psycopg2==2.9.6以及psycopg2-binary==2.9.6上进行了测试。
from sqlalchemy import create_engine, text

engine = create_engine('/path/to/db...')
create_procedure = text("""
CREATE OR REPLACE FUNCTION calculate_sum(a integer, b integer)
RETURNS integer AS $$
BEGIN
    RETURN a + b;
END;
$$ LANGUAGE plpgsql;
""")

with engine.connect() as connection:
   connection.execute(create_procedure)
   connection.commit()

使用text()函数创建SQL表达式和语句作为文本。 使用SQLAlchemy的text方法创建存储过程不会自动将事务提交到数据库。您需要显式提交它。 为了增强功能,您还可以从其他.sql扩展文件中导入SQL语句,这样您可以迭代并为PostgreSQL创建多个SQL函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接