添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

python中的Sqlite格式输出

1 人关注

我设置了一个简单的flask web-app,用户可以从数据库中添加和删除任务。数据库中的所有条目都显示在一个模板中,按照它们被分配的类型进行排序。但我无法将输出格式化,使其至少具有一定的可读性。我怎样才能做到这一点?

实际的数据库使用不同的值和其他东西,所以现在可能不是所有的都有意义。

这是一个从我的sqlite数据库获取所有条目的函数。

def get_tsk_by_type(type):
  c.execute("SELECT * FROM tasks WHERE type=:type", {'type': type})
  result = c.fetchall()
  return result

该数据库。

c.execute("""CREATE TABLE IF NOT EXISTS tasks (
            type text,
            description text,
            amount integer,
            id integer
            )""")

这里是我如何返回所有的条目,然后显示在一个模板中。如果你输入任务的ID,也有一个删除任务的功能。

@app.route('/', methods = ['GET', 'POST'])
def index():
  form = DeleteForm()
  curr_homework = str(get_tsk_by_type("homework"))
  curr_cleaning = str(get_tsk_by_type("cleaning"))
  curr_cooking = str(get_tsk_by_type("cooking"))
  if form.validate_on_submit():
      conn = sqlite3.connect('tasks.db', check_same_thread=False)
      c = conn.cursor()
      delete = request.form['delete']
      if (delete):
        remove_tsk(delete)
      return redirect('/')
      conn.close()
    except:
      return "Something went wrong while submitting the form"
  return render_template('index.html', curr_homework = curr_homwork, curr_cleaning = curr_cleaning, curr_cooking = curr_cooking, form = form)

我的index.html的相关部分看起来像这样。

{% block content %}
            <span>Currently registered homework: {{ curr_homework }}</span><br />
            <span>Currently registered cleaning tasks: {{ curr_cleaning }}</span><br />
            <span>Currently registered cooking tasks {{ curr_cooking }}</span>
{% endblock content %}

However, the output i'm getting looks like this:

Currently registered homework: [('homework', 'math', 1, 'df19c0b1-a2128-431274-2e32-3a2f901b1b26')]
Currently registered cleaning tasks: [('cleaning', 'kitchen', 1, 'df19c0b1-aa18-4874-9e32-3a2f901b1b26')]
Currently registered cooking tasks: [('cooking', 'lunch', 1, '0697c139-0299-4c93-88ac-c07d77377796')]

我试过for-loops和类似的东西,但它只返回get_tsk_by_type()返回的列表中的第一个元组。我也试过panda,但我也不能让它以我想要的方式输出。我怎样才能把它美化到容易阅读的地步?没有括号等等?我后来想把每个任务分开显示,最好是用div来显示。

python
list
sqlite
flask
tuples
Lacrowx
Lacrowx
发布于 2020-05-02
1 个回答
mechanical_meat
mechanical_meat
发布于 2020-05-02
已采纳
0 人赞同

我建议使用dict游标,这样你就可以按名字访问结果元素。
你可以像这样做(从。 https://stackoverflow.com/a/3300514/42346 ):

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d
conn.row_factory = dict_factory

Then you will get this kind of result:

result = c.fetchall()
result
# [{'type':'homework','description':'math',
#   'amount':1,'id':'df19c0b1-a2128-431274-2e32-3a2f901b1b26'}]

然后在你的模板中,你可以做这样的事情。

  {% for homework in curr_homework %}
      <h6>{{ homework['type'] }}</h6>
      <div>{{ homework['description'] }}</div>
    {% if not loop.last %}
    {% endif %}
  {% endfor %}
def get_db():
    if 'db' not in g:
        conn = sqlite3.connect('tasks.db', check_same_thread=False)
        conn.row_factory = dict_factory
        g.db = conn.cursor()
    return g.db