Ah ok... hab wohl zu lange nichts mehr mit der DB-API 2 gemachtBlackJack hat geschrieben:@Hyperion: Doch das sollte eigentlich automatisch gehen. Wenn die Datenbankspalte als DATETIME deklariert ist und da auch tatsächlich ein entsprechender Wert eingetragen wurde, dann sollte bei der Abfrage kein `str`-Objekt geliefert werden.
Datensatz bearbeiten
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ich poste nochmal den aktuellen code
Code: Alles auswählen
from tkinter import *
import sqlite3
import time
import datetime
# sql
con = sqlite3.connect('pastedata.db')
cursor = con.cursor()
#TK
fenster = Tk()
title = fenster.title('Lötpastenkontrolle Version 0.2')
#von entry zu entry springen
def springen1(event):
name.focus_set()
def springen2(event):
datum_ablaufh.focus_set()
def springen3(event):
abschicken.focus_set()
def springen4(event):
seriennummer.focus_set()
#absenden der daten bei neuer paste
def senden():
datum_k = datetime.datetime.now()
datum_3 = datetime.datetime.now() + datetime.timedelta(days=3)
datum_ab = datetime.datetime.now() + datetime.timedelta(hours=4)
werte = (seriennummer.get(),
name.get(),
datum_k,
datum_ablaufh.get(),
datum_ab,
datum_3,
"",
"")
sql = "INSERT INTO paste VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
cursor.execute(sql, werte)
con.commit()
seriennummer.delete('0',END)
name.delete('0',END)
datum_ablaufh.delete('0',END)
seriennummer.focus_set()
def senden1():
datum_o = datetime.datetime.now()
datum_ende = datetime.datetime.now() + datetime.timedelta(hours=8)
sn = seriennummer.get()
datum_abb = "SELECT datum_ab FROM paste WHERE seriennummer=?"
ergebnis = cursor.execute(datum_abb, sn)
ergebnis1 = ergebnis.fetchone()
werte1 = (datum_o, sn)
werte2 = (datum_ende, sn)
ok = "UPDATE paste SET datum_o=? WHERE seriennummer=?"
ok2 = "UPDATE paste SET datum_ende=? WHERE seriennummer=?"
a = ergebnis1[0]
if datum_o <= a:
cursor.execute(ok, werte1)
cursor.execute(ok2, werte2)
#def ausgabe():
# test = cursor.execute("""SELECT * FROM paste WHERE seriennummer=2""")
# test1 = test.fetchall()
# ausgabe1.config(text=test1)
seriennummer = Entry(fenster, font=('Arial', 30))
name = Entry(fenster, font=('Arial', 30))
datum_ablaufh = Entry(fenster, font=('Arial', 30))
#
Label(fenster, text="Seriennummer:").grid(column=0, row=0)
seriennummer.bind("<Return>", springen1)
seriennummer.focus_set()
seriennummer.grid(column=1, row=0)
Label(fenster, text="Name:").grid(column=0, row=1)
name.bind("<Return>", springen2)
name.grid(column=1, row=1)
Label(fenster, text="MHD Hersteller:").grid(column=0, row=2)
datum_ablaufh.bind("<Return>", springen3)
datum_ablaufh.grid(column=1, row=2)
abschicken = Button(master=fenster,
text="Neue Paste",
command=senden,
font=("Arial", 25))
abschicken.bind("<Return>", springen4)
abschicken.grid(column=1, row=3, sticky=W)
abschicken1 = Button(master=fenster,
text="Paste Öffnen",
command=senden1,
font=("Arial", 25))
abschicken1.grid(column=1, row=3, sticky=E)
#
#ausgabe1 = Label(master=fenster,
# font=("Arial", 10),
# text="Bitte Scannen")
#ausgabe1.grid(row=4)
fenster.mainloop()
Code: Alles auswählen
import sqlite3
import time
# Datenbank
con = sqlite3.connect('pastedata.db')
cursor = con.cursor()
print("Verbindung hergestellt...")
# Tabelle erstellen
#cursor.execute("""CREATE TABLE IF NOT EXISTS paste (
# seriennummer TEXT PRIMARY KEY, datum_entnahme DATETIME, datum_ablaufh DATE, datum_3tage DATETIME, name TEXT, datum_oeffnung DATETIME, datum_ablauf DATETIME)""")
cursor.execute("""CREATE TABLE IF NOT EXISTS paste (
seriennummer TEXT PRIMARY KEY,
name TEXT,
datum_k DATETIME,
datum_h DATE,
datum_ab DATETIME,
datum_3 DATETIME,
datum_o DATETIME,
datum_ende DATETIME)"""
)
print("Tabelle erstellt...")
con.close()
print("Verbindung geschlossen!")
@Hyperion: Wie peinlich, ich habe auch schon lange nichts mehr damit gemacht. Ich verwende immer SQLAlchemy. Man muss bei der Verbindung das Argument ``detect_types=True`` mitgeben, damit das funktioniert.
geht leider auch nicht
Code: Alles auswählen
con = sqlite3.connect('pastedata.db',
detect_types=True)
@Eisi: Bei mir geht das wenn die Spalte von Typ TIMESTAMP ist:
Ich fühle mich darin bestätigt SQLAlchemy zu verwenden.
Code: Alles auswählen
In [24]: con = sqlite3.connect('test.db3', detect_types=True)
In [25]: cur = con.cursor()
In [26]: cur.execute('SELECT * FROM test')
Out[26]: <sqlite3.Cursor at 0xa4c1a60>
In [27]: cur.fetchall()
Out[27]: [(1, datetime.datetime(2014, 3, 14, 19, 59, 23, 672698))]