Python aiopg+;sqlalchemy:如何;删除表格(如果存在)";没有原始sql?
我在看,这些台词吓了我一跳:Python aiopg+;sqlalchemy:如何;删除表格(如果存在)";没有原始sql?,python,postgresql,sqlalchemy,drop-table,aiopg,Python,Postgresql,Sqlalchemy,Drop Table,Aiopg,我在看,这些台词吓了我一跳: async def create_table(conn): await conn.execute('DROP TABLE IF EXISTS tbl') await conn.execute(CreateTable(tbl)) 我不想在使用sqlalchemy时执行原始sql查询。但是,我找不到任何其他方法来实现相同的逻辑。我的尝试是: (一) 这引起: sqlalchemy.exc.UnboundExecutionError:表对象“tbl”不是
async def create_table(conn):
await conn.execute('DROP TABLE IF EXISTS tbl')
await conn.execute(CreateTable(tbl))
我不想在使用sqlalchemy时执行原始sql查询。但是,我找不到任何其他方法来实现相同的逻辑。我的尝试是:
(一)
这引起:
sqlalchemy.exc.UnboundExecutionError:表对象“tbl”不是
绑定到引擎或连接。没有一个命令,执行就不能进行
要对其执行的数据库
我也找不到将表绑定到引擎的方法,因为
(二)
这引起:
psycopg2.errors.UndefinedTable:表“tbl”不存在
似乎DropTable
构造不支持IF-existed
部分
因此,问题是,在使用aiopg+sqlalchemy时,有没有办法将
wait conn.execute('DROP TABLE IF EXISTS tbl')
语句重写为没有原始sql的语句?通常TABLE.DROP()
接受一个可选绑定作为第一个位置参数,因此可以像tbl.DROP一样传递conn
(conn,checkfirst=True)
,但我不知道异步是否支持这一点。顺便说一句,在使用SQLAlchemy时执行实际SQL并没有错,它甚至提供了一些帮助,例如text()
。捕捉不可定义的有什么错吗?@AndreaCorbellini它将是4行(try,execute,except,pass)来执行此查询,甚至比使用原始sql更糟糕。我正在寻找最好的(最短、最pythonic的)方法来执行此查询。我希望sqlalchemy具有用于此类简单查询的内置功能。
await conn.execute(tbl.drop(checkfirst=True))
await conn.execute(DropTable(tbl))