Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python aiopg+;sqlalchemy:如何;删除表格(如果存在)";没有原始sql?_Python_Postgresql_Sqlalchemy_Drop Table_Aiopg - Fatal编程技术网

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))