Je vais vous montrer comment gérer le type datetime (pseudo) avec la bibliothèque python standard sqlite3.
Il n'y a pas de type de date (type datetime) dans SQLite3, Du côté Python, vous pouvez faire en sorte que SQLite se comporte comme s'il avait un type datetime.
Avec ce genre de sentiment
import sqlite3
import datetime
#Ouvrez la base de données. Activez la fonction de correspondance / fonction de conversion.
conn = sqlite3.connect(':memory:',
detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
# "TIMESTAMP"Utilisez la fonction de conversion comme pour "DATETIME"
sqlite3.dbapi2.converters['DATETIME'] = sqlite3.dbapi2.converters['TIMESTAMP']
#Génération de curseur
cur = conn.cursor()
#Créer une table avec une colonne nommée datetime
cur.execute("create table mytable(comment text, updated datetime);"
#Entrez respectivement la représentation sous forme de chaîne de caractères et la date / heure dans la colonne datetime.
cur.executemany("insert into mytable(comment, updated) value (?,?)",
[["text_formated.", "2014-01-02 23:45:00"],
["datetime_class.", datetime.datetime(2014,3,4, 12,34,56)]])
ret = cur.execute("select * from mytable;")
for row in ret.fetchall():
print "'%s'" % row[0], row[1], type(row[1])
##Comme ceci ↓, la colonne déclarée comme datetime renvoie le type datetime.
# text_formated. 2014-01-02 23:45:00 <type 'datetime.datetime'>
# datetime_class. 2014-03-04 12:34:56 <type 'datetime.datetime'>
Le type datetime apparaît uniquement lorsqu'il est visualisé à partir de Python, et le format de données réel stocké dans la base de données SQLite est "2014-01-02 23:45:00" ou "2014-03-04 12:34:56" Il ne s'agit que de ** données de chaîne de caractères **.
En fait, dans la bibliothèque standard python sqlite3 / dbapi2.py
, une" fonction de conversion "qui change le nom de type SQL" timestamp "en datetime de Python est prédéfinie.
Ce comportement de conversion automatique est activé en spécifiant detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES
lorsque vous effectuez sqlite3.connect ()
.
La liste des fonctions de conversion se trouve dans sqlite3.dbapi2.converters
, donc
Enregistrez la fonction de conversion pour le nom de type déjà enregistré TIMESTAMP
comme pour DATETIME
, commesqlite3.dbapi2.converters ['DATETIME'] = sqlite3.dbapi2.converters ['TIMESTAMP']
Faire.
Ce qui précède décrit uniquement datetime.datetime (AAAA, MM, JJ, hh, mm, ss) [Python] -> "AAAA-MM-JJ hh: mm: ss" [sqlite3]. Alors, où est le modèle inversé de "AAAA-MM-JJ hh: mm: ss" [sqlite3] -> datetime.datetime (AAAA, MM, JJ, hh, mm, ss) [Python]? Je vais omettre l'histoire. En gros, la "fonction adaptateur" qui est entrée comme chaîne de caractères dans SQLite lorsque datetime
est lancée est prédéfinie dans sqlite3 / dbapi2.py
.
Pour plus d'informations, lisez 11.13.5.4. Fonctions d'ajustement et de conversion par défaut --SQLite dans la référence de la bibliothèque standard Python. est.
Recommended Posts