【问题标题】:Sqlite clean up statements within code and add to fileSqlite 清理代码中的语句并添加到文件中
【发布时间】:2018-01-19 15:32:01
【问题描述】:

我想清理代码中的原始语句,并将它们作为 sql 文件添加到另一个目录中的单独文件中。

所以想运行下面的代码:

read_cursor.execute('INSERT OR IGNORE INTO quantity VALUES (?,?,?)', row)

但将其更改为:

read_cursor.execute('sqlstatements/quantity.sql', row)

这可能我该怎么做?

【问题讨论】:

标签: python sqlite


【解决方案1】:

我认为这实际上不是一个好主意 - 它会使您的代码无缘无故地更难阅读和维护(更不用说为每个查询打开/阅读文件的成本了)。

如果您的目标是将数据访问(如何获取/存储数据)与业务逻辑(如何使用数据)分离,更好的解决方案是编写具有适当功能的数据访问模块,并从您的主要代码,即:

# 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

这当然是一个非常简单的示例 - 根据您的应用程序的复杂性,您可能希望为不同的操作集(取决于您正在处理的数据集等)设置不同的类,并且在所有情况下,您都可能会想要确保连接始终正确关闭,当它被服务器关闭时它会尝试重新打开等,但你明白了主要思想。

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多