【问题标题】:SQLAlchemy: using variable table nameSQLAlchemy:使用变量表名
【发布时间】:2020-04-15 13:40:57
【问题描述】:

我需要使用带有变量表名(来自外部源)的 SQLAlchemy 执行 SQL 语句。 我尝试了几种选择,但没有一个成功。

尝试1:使用text()

def empty_table(table_name,testf):
        with db.connect() as conn:
            s = text("SELECT * FROM $table_name")
            rp = conn.execute(s) 

收到:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) 语法 “$” LINE 1 或附近的错误:SELECT * FROM $table_name

尝试 2:使用select()

with db.connect() as conn:
            s = select([table_name]) 
            rp = conn.execute(s)

接收:

sqlalchemy.exc.ArgumentError:文本列表达式 'my_test_table' 应显式声明为 text('my_test_table'),或使用 column('my_test_table') 获取更多信息 特异性

我在How to do a sqlalchemy query using a string variable as table name? 中发现可以使用 eval(my_variable) 解决问题,但没有详细说明。

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    对于一个简单的SELECT * FROM ... 查询,您可以这样做

    import sqlalchemy as sa
    
    # ...
    
    # test data
    table_name = 'user_table'
    
    # test code
    some_table = sa.Table(table_name, sa.MetaData(), autoload_with=engine)
    query = some_table.select()
    with engine.begin() as conn:
        result = conn.execute(query).fetchall()
        print(result)
        # [(1, 'gord', 'gord@example.com'), (2, 'user2', 'user2@example.com')]
    

    【讨论】:

    • 这样可以截断表格吗?
    • 回复:TRUNCATE TABLE - 看here
    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2019-10-05
    • 2015-07-28
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多