gpt4 book ai didi

python - 在 SQLite 中插入日期

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:47 24 4
gpt4 key购买 nike

我想在 SQLite 中插入一个日期(作为文本数据类型)。这是我的设置:

def create_table():
c.execute('CREATE TABLE IF NOT EXISTS practice_data(date TEXT, distance REAL, duration REAL, avg_pace REAL)')

date = str(input('Enter DATE (i.e. 2016-01-10): '))
distance = float(input('Enter TOTAL DISTANCE RAN (i.e 2.11): '))
duration = float(input('Enter TOTAL DURATION (i.e. 20.34): '))
avg_pace = float(input('Enter AVERAGE PACE (i.e. 10.44): '))

def data_entry():
c.execute("INSERT INTO practice_data(date,distance,duration,avg_pace) VALUES ({}, {}, {}, {})".format(date, distance, duration, avg_pace))
conn.commit()
c.close()
conn.close()


create_table()
data_entry()

当我运行该程序时,它工作正常。但是当我打开 SQLite 浏览器时,日期列将不正确。例如,如果我输入“2016-11-06”,它将输入“1999”。出于某种原因,假设“-”是减法。尽管我已指定该日期的数据类型为 TEXT。

我看到 SQLite 有一个 datetime 选项,但我不确定如何实现它。

最佳答案

有两个问题,都不是 SQLite 的问题。

在 Python 2 中这一行:

date = str(input('Enter DATE (i.e. 2016-01-10): '))

如果您输入 2016-11-06,则会导致 date 被分配为 1999,这是因为 Python 2 会评估输入。

有两种解决方案:

  • 使用 raw_input()而不是 input() . raw_input() 将返回一个未经评估的字符串:

    >>> n = input('? ')
    ? 1+2+3+4
    >>> n
    10
    >>> n = raw_input('? ')
    ? 1+2+3+4
    >>> n
    '1+2+3+4'
  • 使用 Python 3

编辑

由于您使用的是 Python 3,因此上述内容不适用。

另一个问题是由于您使用字符串格式构造查询的方式:

c.execute("INSERT INTO practice_data(date,distance,duration,avg_pace) VALUES ({}, {}, {}, {})".format(date, distance, duration, avg_pace))

这将执行查询:

INSERT INTO practice_data(date,distance,duration,avg_pace) VALUES (2016-11-06, 1, 2, 3)

SQLite 将评估 2016-11-06,然后插入结果。

你可以通过像这样引用文本字段来解决这个问题:

c.execute("INSERT INTO practice_data(date,distance,duration,avg_pace) VALUES ('{}', {}, {}, {})".format(date, distance, duration, avg_pace))

但您不应该这样做,因为它会导致 SQL 注入(inject)漏洞。而不是字符串格式化使用参数化查询:

c.execute("INSERT INTO practice_data(date,distance,duration,avg_pace) VALUES (?, ?, ?, ?)", (date, distance, duration, avg_pace))

这对字段使用占位符 (?),数据库引擎将执行安全替换,根据需要正确引用和转义值。

关于python - 在 SQLite 中插入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40455322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com