PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pandas - write_frame à sqlite - datetime64[ns]

Vous avez en effet raison de dire que le champ datetime64 est à l'origine des problèmes. Sqlite n'a pas de type datetime réel, mais ils utilisent des types texte ou entier pour représenter les heures (voir http:// www.sqlite.org/datatype3.html et http://www.sqlite.org/lang_datefunc.html ).

Donc, en fonction de ce que vous voulez faire, vous pouvez d'abord convertir votre colonne datetime en chaîne :

df['field2'] = df['field2'].apply(str)

ou à un entier (le nombre de secondes depuis le 1970-01-01 00:00:00 UTC):

df['field2'] = df['field2'].astype('int64')

puis écrivez vos données dans sqlite.

Notes annexes :

  • Quelle version de pandas utilisez-vous ? Parce que dans la version 0.13 (ou inférieure) il y a un bogue dans le if_exists='replace' implémentation, qui est corrigée dans la version 0.13.1 (dernière version stable pour le moment)
  • Dans la prochaine pandas 0.14, il y aura une nouvelle implémentation des fonctions sql basées sur sqlalchemy, et là la conversion en chaîne se fera automatiquement (donc plus d'erreur pour les données datetime64).