I’m stuck with this bug and on how to solve it.
Background: I have built a ‘Paycheck’ table in SQLite that has a date attribute, net pay attribute, and a gross pay attribute. I have set the date attribute to a date datatype in SQLite, and set the net and gross attribute to an integer datatype.
The problem: I’m experiencing a problem where when I try to insert a paycheck record, the date attribute will be stored as “1994”. The thing is, while I was making the function to store a paycheck record, I read online that the date format for the date datatype in SQLite was yyyy-mm-dd, and I made sure that I’d insert the date in that format, but the code would run fine but in the database, every time I try to add a record it would state “1994” for the date.
Here’s all the associated code:
import sqlite3
import datetime
def date_sql_format():
"""return date in sql DATE format"""
return str(datetime.datetime.now().strftime("%Y-%m-%d"))
def execute(command: str):
"""Take a sql query and execute it on the database."""
connect = sqlite3.connect("db.sqlite")
cursor = connect.cursor()
cursor.execute(command)
connect.commit()
connect.close()
def add_paycheck(date: str, net: float, gross: float):
"""Add a paycheck record to the database."""
template = f"{date}, {net}, {gross}"
execute(f"INSERT INTO Paycheck (Date, Net, Gross) VALUES ({template})")
Advertisement
Answer
Evaluate this 2020-04-22
as an arithmetic expression. The answer is 1994. That’s where that number is coming from.
sqlite doesn’t have a datatype date
internally. If you look at the Affinity Name Examples section of the sqlite datatypes doc, that typename DATE
from a create table statement results in a NUMERIC
affinity. So it does the math.
Change the datatype of the date column to TEXT. And you might want to keep the sqlite date and time functions doc handy.