【问题标题】:How to get list from database field type string如何从数据库字段类型字符串中获取列表
【发布时间】:2020-12-24 06:31:24
【问题描述】:

我在 DB 的一列 CHAR/STRING 中有这个列表:

['2020-09-05 10:15:00', '2020-09-05 10:30:00', '2020-09-05 10:45:00', '2020-09-05 11:00:00', '2020-09-05 11:15:00']

我把它们带到 python3:

 employee_id = request.args.get('id')
            employee = Employee.query.filter_by(id = employee_id).first()
            list_time_em = employee.free_time
            print(list_time_em) 
            for x in list_time_em:
                print(x). #try to print time in list from DB

结果

['2020-09-05 10:15:00', '2020-09-05 10:30:00', '2020-09-05 10:45:00', '2020-09-05 11:00:00', '2020-09-05 11:15:00']

['2020-09-0510#...etc
[
'
2
0
2
0
-
0
9
-
0
5
1
0
:
1
5

我尝试了很多方法来获取 LIST 中的元素,如下所示:

2020-09-05 10:15:00
2020-09-05 10:30:00

...等 但我不能 请任何人帮助我! - - - - 解决方案 - - - - 感谢@Eddy

        if request.args.get('do')=='add_job':
            employee_id = request.args.get('id')
            employee = Employee.query.filter_by(id = employee_id).first()
            list_time_em = employee.free_time
            datesStr = list_time_em
            def getDates(datesStr):
                dates = json.loads(datesStr.replace('\'', '"'))  # make sure we dont break when parsing
                return dates

            dates = getDates(datesStr)
            return render_template('add_job.html',list_time_em=dates)

我找到了另一种方式:

        if request.args.get('do')=='add_job':
            employee_id = request.args.get('id')
            employee = Employee.query.filter_by(id = employee_id).first()
            list_time_em = employee.free_time
            x = list_time_em
            ls = x.strip('[]').replace('"','').split(',')
            print(ls)
           
            return render_template('add_job.html',list_time_em=ls)

【问题讨论】:

  • 错误在哪里,你只是一个一个地打印每个字符。
  • 我想获取时间戳:'2020-09-05 10:15:00' ...等,
  • 看起来您已经存储了 Python 列表的字符串表示形式。您应该修复数据源以使用更合适(和稳定)的表示,例如 JSON,甚至更好:更改架构以将员工的空闲时间存储在自己的表中,每行一行入口。在修复数据时,您可以使用 ast.literal_eval() 将 Python 列表的字符串表示形式转换为正确的列表(而不是使用 str.replace() 和 JSON 进行破解)。

标签: sql python-3.x list flask sqlalchemy


【解决方案1】:

这是使用 mysql 库 导入mysql.connector

            mydb = mysql.connector.connect(
              host="localhost",
              user="root",
              password="",
              database="closer"
            )
            mycursor = mydb.cursor()

            mycursor.execute("SELECT message FROM message")

            myresult = mycursor.fetchall()
            li=list()
            for x in myresult:
                li.append(x)
            print(li)

【讨论】:

  • 结果:['[', "'", '2', '0', '2', '0', '-', '0', '9', '-' , '0', '5', '', '1', '0', ':', '1', '5', ':', '0', '0', "'", ', ', '', "'", '2', '0', '2', '0', '-', '0', '9', '-', '0', '5', ' ', '1', '0', ':', '3', '0', ':', '0', '0', "'", ',', '', "'", ' 2','0','2','0','-','0','9','-','0','5','','1','0', ':', '4', '5', ':', '0', '0', "'", ',', '', "'", '2', '0', '2' , '0', '-', '0', '9', '-', '0', '5', '', '1', '1', ':', '0', '0 ', ':', '0', '0', "'", ',', '', "'", '2', '0', '2', '0', '-', ' 0'、'9'、'-'、'0'、'5'、''、'1'、'1'、':'、'1'、'5'、':'、'0'、 '0', "'", ']']
  • 我尝试将时间戳渲染为html,一一如:2020-09-05 10:15:00。 {% for free_time in list_time_em %}
    {{ x }}
    {% endfor %}
  • 让我在 python 中安装一个 dbms 库
  • 谢谢,我也更新了解决方案 :) 我使用:SQLAlchemy
【解决方案2】:

您可以使用 json 库来完成此操作

import json

datesStr = "['2020-09-05 10:15:00', '2020-09-05 10:30:00', '2020-09-05 10:45:00', '2020-09-05 11:00:00', '2020-09-05 11:15:00']"

def getDates(datesStr):
    dates = json.loads(datesStr.replace('\'', '"')) # make sure we dont break when parsing
    return dates

dates = getDates(datesStr)

for date in dates:
    print(date)

在您的具体示例中:

import json

def getDates(datesStr):
    dates = json.loads(datesStr.replace('\'', '"')) # make sure we dont break when parsing
    return dates

employee_id = request.args.get('id')
            employee = Employee.query.filter_by(id = employee_id).first()
            list_time_em = employee.free_time
            dates = getDates(list_time_em)
            for date in dates:
                print(date). #try to print time in list from DB

【讨论】:

  • 嗨 Eddy,我也想将 getDates 渲染到 jinja2,如何使用它:)
  • 嗨,对不起,我不知道(或者我不知道)jinja2 是什么,但是通过快速搜索我发现它是 phyton 的 html 渲染引擎,所以,你只需要公开结果getDates() 提供一个变量并将该变量用于 html 模板代码,这样的事情应该可以工作:``` from jinja2 import Template dateList = getDates(datesStr) template = Template('Dates:
      {% for日期中的日期 %}
    • {{date}}
    • {% endfor %}
    ') template.render(dates=dateList) ``
【解决方案3】:

感谢@Eddy

        if request.args.get('do')=='add_job':
            employee_id = request.args.get('id')
            employee = Employee.query.filter_by(id = employee_id).first()
            list_time_em = employee.free_time
            datesStr = list_time_em
            def getDates(datesStr):
                dates = json.loads(datesStr.replace('\'', '"'))  # make sure we dont break when parsing
                return dates

            dates = getDates(datesStr)
            return render_template('add_job.html',list_time_em=dates)

我找到了另一种方式:

        if request.args.get('do')=='add_job':
            employee_id = request.args.get('id')
            employee = Employee.query.filter_by(id = employee_id).first()
            list_time_em = employee.free_time
            x = list_time_em
            ls = x.strip('[]').replace('"','').split(',')
            print(ls)
           
            return render_template('add_job.html',list_time_em=ls)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 2012-05-03
    • 2013-12-03
    • 1970-01-01
    • 2014-01-01
    • 2017-02-23
    • 2013-09-04
    相关资源
    最近更新 更多