首页 > 解决方案 > 使用烧瓶和 SQLAlchemy 在数据库中插入用户提供的值

问题描述

试图在 Flask 应用程序的数据库(主)中的现有表(客户端)中插入一些值。这个想法是插入用户或某些脚本提供的值(存储在变量中)

我的烧瓶脚本如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:pswd@localhost/master'
db = SQLAlchemy(app)

class clients():
    __tablename__ = "clients"
    def __init__(self, client_id, command, response, log_date):
        client_id = 'asdfg123'
        command = 'echo'
        response = 'All Is Well'
        log_date = '2018-06-21'

db.session.commit()

print "yo"

@app.route("/")
def main():
    return 'Hello World !'

if __name__ == '__main__':
    app.run()

数据库架构如下:

master=> select * from clients;
 client_id | command |     response     |  log_date  
-----------+---------+------------------+------------
 QWERTY123 | ls      | OK Report Hai Ji | 2018-06-21
(1 row)

几乎所有文档/示例都在谈论创建模式,然后使用 self 插入值,这对我来说没用。

标签: pythonpostgresqlflasksqlalchemyflask-sqlalchemy

解决方案


因此,它似乎缺少一些使它起作用的东西。首先,模型的定义需要一些东西。

这是我认为应该的。

class Client(db.Model):
  client_id = db.Column(db.String(30), primary_key=True)
  command = db.Column(db.String(30))
  response = db.Column(db.String(30))
  log_date = db.Column(db.Date)

然后,此模型代表表中的单行。然后在您的一条路线中,您可以从表单 POST 或路径变量或其他东西中提取用户数据,并创建一个像这样的对象。

client = Client(client_id=formvar1, command=formvar2, response=formvar3, log_date=formvar4)

现在您有了要告诉 SQLAlchemy(仍在路由中)将该对象插入数据库的对象。

db.session.add(client)
db.session.commit()

推荐阅读