我想清理代码中的原始语句,并将它们作为sql文件添加到另一个目录中的单独文件中。
所以想运行下面的代码:
read_cursor.execute('INSERT OR IGNORE INTO quantity VALUES (?,?,?)', row)
但将其更改为:
read_cursor.execute('sqlstatements/quantity.sql', row)
这有可能我会怎么做呢?
答案 0 :(得分:0)
我认为这实际上并不是一个好主意 - 它会使你的代码更难以阅读和维护而没有任何理由(并且不要谈论为每个查询和任何查询打开/读取文件的成本)。
如果您的目标是从业务逻辑(如何使用数据)中分离数据访问(如何获取/存储数据),则更好的解决方案是使用适当的函数编写数据访问模块并从您的函数中调用这些函数主要代码,即:
# datalayer.py
import atexit
_conn = <open your connection here>
def close_connection():
if _conn:
_conn.close()
_conn = None
atexit.register(close_connection)
# FIXME: proper arg names
def update_quantity(x, y, z, commit=True):
c = _conn.cursor()
try:
r = c.execute('INSERT OR IGNORE INTO quantity VALUES (?,?,?)', (x, y, z))
except Exception as e:
c.close()
raise
if commit:
_conn.commit()
return r
然后在你的代码中:
import datalayer
def func():
# do things here
datalayer.update_quantities(a, b, c)
# etc
这当然是一个非常愚蠢的例子 - 根据您的应用程序的复杂性,您可能希望为不同的操作集(取决于您正在处理的数据集等)具有不同的类,并且在所有情况下您可能都可能我想确保连接始终正确关闭,当它被服务器关闭时尝试重新打开,但是你得到了主要想法。