我有一堆python方法遵循以下模式:
def delete_session(guid):
conn = get_conn()
cur = conn.cursor()
cur.execute("delete from sessions where guid=%s", guid)
conn.commit()
conn.close()
有没有一种更Python的方法来执行原始sql。每个方法开头和结尾的两行代码开始让我烦恼。
我不是在寻找一个orm,我想坚持使用原始sql。
6条答案
按热度按时间9lowa7mx1#
您可以编写上下文管理器并使用with语句。例如,请参见this blog post (archived)
python文档中也有一个非常符合你需要的示例,请参见本页的8.1节,特别是开头的片段:
91zkwejq2#
注意
execute
,第二个参数必须是[guid](只有一个项目的列表)至于你的问题,我通常只使用封装连接和游标的类,但看起来您可能更喜欢使用 * 执行上下文 *对象,其__enter__
方法在__leave__
提交或回滚时提供游标,具体取决于终止是正常的还是异常的;这会使你的代码如果你喜欢这种风格,告诉我们,我将告诉你如何编写
get_cursor
,其他人无疑会建议用装饰器来代替,所以你可以这样写:但我认为这使得提交/回滚等问题变得有点模糊。2不过,如果你喜欢这样做,请再次告诉我们,我也可以向你展示如何编写该表单。
7jmck4yq3#
“我有很多Python方法都遵循以下模式:“
这是令人困惑的。
要么你有一堆函数,要么你有一个类的一堆方法。
函数束。
换做这个。
你的函数声明长了两行,但本质上是一样的。你可以使用
func1( args )
,因为它是一个可调用的对象。程序的其余部分应该保持不变。一个类中的方法束。
所有方法都可以类似于delete_session,并使用一个公共的
sql_execute
方法。iibxawm44#
它不需要更像Python,只要更有结构:
jchrr9hc5#
装修师?
x759pob26#
根据这些文档,如果您使用的是SQLite3,您甚至不需要
Cursor
,正如这些文档所说,Cursor
“通常是多余的”。相反,您可以直接在连接对象上使用快捷方法
execute
executemany
和executescript
: