2016-06-28 23 views
1

Ich verwende postgresql. Darauf habe ich Daten, die ich auf Python verwenden muss. Ein Tabellenfeld enthält ein Datum. Es sieht wie folgt aus:Konvertieren Zeichenfolge in ISO-Datum Python

enter image description here

Auf meinem Python-Skript psycopg2 mit I Ergebnisse bin geting, wenn ich das Datum bekommen es als String auf mongodb gespeichert

"created" : "2016-06-16T19:53:43.776456" 

Mein Code sieht aus wie dies:

query = "SELECT name, created FROM user;" 
cur.execute(query) 
user_data = cur.fetchall() 
for user_info in user_data: 
    user_json = { 
     'name': user_info[0], 
     'created': user_info[1] 
    } 

ich möchte dies konvertieren "created" : "2016-06-16T19:53:43.776456" in "created" : ISODate("2016-06-24T09:08:09.333Z"), aber ich weiß nicht, wie ich zu konvertieren t im richtigen Format. Bitte helfen Sie!

+0

'wählen json_build_object ('name', name, 'erstellt', to_char (erstellt,‚ "isodate" (YYYY-MM-DD zu installieren "T" HH24: MI: SS.MS "Z") ")) vom Benutzer;' – Abelisto

+0

Woher soll ich 'to_char' importieren? – Babel

+0

' to_char' ist eine PostgreSQL-Funktion. In meinem obigen Beispiel erzeugt die Abfrage fertige JSONs. Sie können es wie folgt verwenden: 'query =" SELECT name, to_char (erstellt, '' ISODate \ "(JJJJ-MM-TT \" T \ "HH24: MI: SS.MS \" Z \ ") ') FROM user;" ' – Abelisto

Antwort

0

Ersetzen Sie diese

query = "SELECT name, created FROM user;" 

dieses

query = "SELECT name, 'ISODate(\"' || created || '\")' FROM user;" 

Die Abfrage wird die gut gebildete Zeichenkette als created speichern möchten zurückzukehren.

+0

Dies ist speichern Datum noch als Zeichenfolge, genau wie diese "erstellt": "ISODate (\" 2016-06-17T14: 30: 35.906396 \ ")" – Babel

+0

Ich bin nicht gewohnt, psycopg2 und Python. Sie müssen korrekt in Anführungszeichen und doppelten Anführungszeichen fliehen, um 'SELECT name 'zu erhalten,' ISODate ('' || created || '') 'FROM user;' zugewiesen an 'query' var und als Argument für' execute () ' – cachique

1

IMO Sie müssen ISODate nicht angeben, wenn Sie die Daten in der MongoDB speichern.

Python-Code (Fragment):

cur.execute("select name, created from tt_user;") 
data = cur.fetchall() 
for row in data: 
    print(row[0], row[1]) 
    mdr = { 
     'user': row[0], 
     'created': row[1] 
    } 
    mongo_db.tt_user.insert_one(mdr) 
print("Done.") 

print("Check data in MongoDB"); 

for row in mongo_db.tt_user.find(): 
    print(row) 

und seine Ausgabe:

Load data from PostgreSQL into MondoDB... 
('user1', datetime.datetime(2016, 6, 29, 13, 26, 28, 632436, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None))) 
('user2', datetime.datetime(2016, 6, 29, 13, 26, 28, 632739, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None))) 
('user3', datetime.datetime(2016, 6, 29, 13, 26, 28, 632751, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None))) 
('user4', datetime.datetime(2016, 6, 29, 13, 26, 28, 632757, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None))) 
('user5', datetime.datetime(2016, 6, 29, 13, 26, 28, 632762, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None))) 
Done. 
Check data in MongoDB 
{u'_id': ObjectId('5773a254afd34b43d76aa792'), u'user': u'user1', u'created': datetime.datetime(2016, 6, 29, 10, 26, 28, 632000)} 
{u'_id': ObjectId('5773a255afd34b43d76aa793'), u'user': u'user2', u'created': datetime.datetime(2016, 6, 29, 10, 26, 28, 632000)} 
{u'_id': ObjectId('5773a255afd34b43d76aa794'), u'user': u'user3', u'created': datetime.datetime(2016, 6, 29, 10, 26, 28, 632000)} 
{u'_id': ObjectId('5773a255afd34b43d76aa795'), u'user': u'user4', u'created': datetime.datetime(2016, 6, 29, 10, 26, 28, 632000)} 
{u'_id': ObjectId('5773a255afd34b43d76aa796'), u'user': u'user5', u'created': datetime.datetime(2016, 6, 29, 10, 26, 28, 632000)} 

Und in der MongoDB Konsole:

> db.tt_user.find() 
{ "_id" : ObjectId("5773a254afd34b43d76aa792"), "user" : "user1", "created" : ISODate("2016-06-29T10:26:28.632Z") } 
{ "_id" : ObjectId("5773a255afd34b43d76aa793"), "user" : "user2", "created" : ISODate("2016-06-29T10:26:28.632Z") } 
{ "_id" : ObjectId("5773a255afd34b43d76aa794"), "user" : "user3", "created" : ISODate("2016-06-29T10:26:28.632Z") } 
{ "_id" : ObjectId("5773a255afd34b43d76aa795"), "user" : "user4", "created" : ISODate("2016-06-29T10:26:28.632Z") } 
{ "_id" : ObjectId("5773a255afd34b43d76aa796"), "user" : "user5", "created" : ISODate("2016-06-29T10:26:28.632Z") } 
> 

So ist es das Verhalten der Client-Software, nicht das Speicherproblem. Speichern Sie einfach die Daten als Datetime.

PS: Danke, dass du mich gezwungen, MongoDB endlich :)

+0

danke für deine Antwort. Wenn ich ein Element aus den Ergebnissen drucke, bekomme ich dieses '(" abc ", '2016-06-15T16: 58: 19.465608'), so dass mein Datum dort wie ein String behandelt wird, wenn ich' 'created' ': row mache [1] 'es ist so gespeichert' "erstellt": "2016-06-16T19: 53: 43.776456" 'so dass das für mich nicht so funktioniert – Babel

+0

@Egzona Liefern' Benutzer' Tabelle DDL (Skript erstellen). – Abelisto

+0

@Egzona I Sache, dass Sie die Datum/Uhrzeit-Werte als String statt "Datetime" -Typ speichert. Versuchen Sie, sie beim Erstellen des JSON-Objekts zu konvertieren. – Abelisto

Verwandte Themen