-1

i am reading a entrance time from sqlite database to calaulate the duration of the car stay. the datetime is currenly able to insert and retrive but when formated to do calualtion it keeps give an error when using the datetime.strptime funtion.EnterTime is stored as a text in the sqlite database.

import sqlite3 import smtplib from datetime import datetime, timedelta # Connect to the database conn = sqlite3.connect("py.db") # Get current time current_time = datetime.now() # Define the carplate number carplate = "SJJ4649G" # Check if the carplate already exists in the database cursor = conn.cursor() query = "SELECT * FROM entrance WHERE carplate = ?" cursor.execute(query, (carplate,)) result = cursor.fetchall() # If the carplate already exists, send an email if len(result) > 0: # Get the email address from the gov_info table query = "SELECT email FROM gov_info WHERE carplate = ?" cursor.execute(query, (carplate,)) email_result = cursor.fetchall() # Get the entrance time from the entrance table query = "SELECT EnterTime FROM entrance WHERE carplate = ?" cursor.execute(query, (carplate,)) entrance_time_str = cursor.fetchone()[0] print (entrance_time_str) entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S") # Calculate the cost delta = current_time - entrance_time cost = delta.total_seconds() / 3600 * 10 # 10 is the hourly rate # Email details email = "[email protected]" password = "ufwdiqcfepqlepsn" send_to = email_result[0][0] subject = "Parking Fees" message = f"The cost for parking the car with plate number {carplate} is ${cost:.2f}. The entrance time was {entrance_time} and the current time is {current_time}." # Send the email smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.ehlo() smtp.starttls() smtp.login(email, password) smtp.sendmail(email, send_to, f"Subject: {subject}\n\n{message}") smtp.quit() # If the carplate does not exist, insert it into the database else: query = "INSERT INTO entrance (carplate, EnterTime) VALUES (?, ?)" cursor.execute(query, (carplate, current_time)) conn.commit() # Close the connection cursor.close() conn.close() 

i have printed the entrance time out and it matches the data shown in the database. i have also tried to remove the fromating that would not let me do the calulations. this is the error i get

2023-02-06 16:07:46.640395 Traceback (most recent call last): File "/media/pi/6134-E775/payment.py", line 32, in <module> entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S") File "/usr/lib/python3.7/_strptime.py", line 577, in _strptime_datetime tt, fraction, gmtoff_fraction = _strptime(data_string, format) File "/usr/lib/python3.7/_strptime.py", line 362, in _strptime data_string[found.end():]) ValueError: unconverted data remains: .640395 
0

1 Answer 1

0

You need to append .%f to take microseconds:

entrance_time_str = '2023-02-06 16:07:46.640395' # HERE --v entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S.%f") 
>>> entrance_time_str '2023-02-06 16:07:46.640395' >>> entrance_time datetime.datetime(2023, 2, 6, 16, 7, 46, 640395) 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.