sqlite 在Jinja模板中运行查询执行

cgh8pdjw  于 2023-01-09  发布在  SQLite
关注(0)|答案(1)|浏览(148)

如何在此html中获取db.execute("SELECT * FROM table ...")

app = Flask(__name__)
db_admin = SQL("sqlite:///administration.db")
@app.route("/settings", methods=["GET", "POST"])

def setting():
    if request.method == "POST":

        return render_template("settings.html")

我有一个数据库,需要在我的模板(settings.html)onchange事件发生在td时,数据库中的UPDATE table SET ...值。

<td onclick="query();">{{ cell }}</td>

我试过了:

function query()
{
    let sqlite3 = require('sqlite3');
    let db = new sqlite3.Database('./administration.db');
    row= db.execute("UPDATE table SET user_group=? WHERE ...", value);
}

请假设该值为输入文本值。

bvuwiixz

bvuwiixz1#

我认为你的方法获得了大量的流量。我认为向用户指出他们留下了未保存的数据更有意义。你可以使用beforeunload事件来实现这一点。然而,当用户关闭窗口时,这会达到一个限制。
代码可能如下所示。

<script type="text/javascript">
    (function() {
        window.addEventListener('DOMContentLoaded', () => {
            let isChanged = false;
            document.querySelectorAll('input').forEach(elem => {
                elem.addEventListener('change', () => {
                    isChanged = true; 
                });
            });

            document.querySelector('form').addEventListener('submit', () => {
                isChanged = false;
            })

            window.addEventListener('beforeunload', (evt) => {
                if (isChanged) {
                    evt.returnValue = isChanged;
                }
            });
        });
    })();
</script>

正如您所想,仍然可以使用AJAX在后台为每个触发的事件向服务器发送表单数据。
x一个一个一个一个x一个一个二个x
如果您只想发送更改的输入而不是整个表单,那么代码很容易修改。

<script type="text/javascript">

    (function() {
        window.addEventListener('DOMContentLoaded', () => {
            document.querySelectorAll('input').forEach(elem => {
                elem.addEventListener('change', function() {
                    const formData = new FormData();
                    formData.append(this.name, this.value); 
                    fetch('/settings', {
                        method: 'post', 
                        body: formData
                    });
                });
            });
        });
    })();

</script>

相关问题