SQLAlchemy/encode/databases 中带有 SQL 函数的原始查询

Raw Query with SQL function in SQLAlchemy/encode/databases

我是 Python 和 FastAPI 的初学者。 我正在使用 FastAPI,我有一个 table,其中要求使用 PostgreSQLpgcrypto 模块加密用户的个人信息。 原始查询就像这样,可以在任何数据库客户端中执行,并且执行时没有任何错误

insert into customers (email, gender) values (pgm_sym_encrypt('hello@gmail.com', 'some_secret_key'), 'male')

如何使用 SQLAlchemy 核心或 encode/databases 执行此查询? 我试过这个

from sqlalchemy import func
query = f"""
    insert into customers (email, gender) values 
    (:email, :gender)
    """
await database.execute(query=query, values={'email': func.pgm_sys_encrypt('hello@gmail.com', 'secret_key'), 'gender': 'male'})

没用。 我也试过了

query = f"""
    insert into customers (email, gender) values 
    (pgm_sys_encrypt('hello@gmail.com', 'secret_key'), :gender)
    """
await database.execute(query=query, values={'gender': 'male'})

这也没有用。我不知道如何在原始查询中执行函数。请帮忙。我已经尝试了很多,但我现在仍然对这个一无所知。预先感谢您的帮助。

因为它是原始查询,您应该能够像在原始查询中那样指定它 SQL,所以这应该有效:

from sqlalchemy.sql import text
query = """
    insert into customers (email, gender) values 
    (pgm_sys_encrypt(:email, :secret_key), :gender)
    """
await database.execute(query=text(query), values={'email': 'hello@gmail.com', 'secret_key': 's3cr37', 'gender': 'male'})