У меня проблема с созданием файла CSV из моей базы данных. Ниже приведен мой код.
import pymysql
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import csv
from datetime import datetime
import time
import json
# open connection to the database
conn = pymysql.connect(host='your host',
port=3306,
user='user_name',
passwd='',
db='ai_demo',
charset='utf8')
cur = conn.cursor()
sql = "SELECT order_data FROM `transactions`"
cur.execute(sql)
rows = cur.fetchall()
data = {}
dadaArray=[]
for row in rows:
#print(row)
for i in row:
s=json.loads(i)
for item in s:
date_str = item.get('date')
date_object = datetime.strptime(date_str, '%Y-%m-%d')
#print(date_object)
time_str = item.get('time')
time_object = datetime.strptime(time_str, '%H:%M:%S').time()
print(time_object)
date_time_object = datetime.combine(date_object,time_object)
#print(date_time_object)
subscription_price = item.get('totalOrderSubscriptionPrice')
data['timestamp'] =date_time_object.strftime('%Y-%m-%d %H:%M:%S')
data['price'] = json.loads(subscription_price)
#print(data)
dadaArray.append(data)
#with open("out.csv", "w", newline='') as csv_file: # Python 3 version
with open("out.csv", "wb") as csv_file: # Python 2 version
csv_writer = csv.writer(csv_file)
csv_writer.writerow([data for data in dadaArray]) # write headers
csv_writer.writerows(cur)
# close connection to the database
cur.close()
conn.close()
Проблема в том, что я получаю некоторые значения правильно, но через некоторое время он начинает выдавать ошибку "AttributeError: у объекта 'Unicode' нет атрибута 'get'"
Вот полная консоль моего шпиона :
runfile('/Users/mss/.spyder/temp.py', wdir='/Users/mss/.spyder')
06:29:58
06:30:05
06:30:11
06:30:23
06:36:48
06:38:57
06:46:41
07:15:32
07:51:57
07:52:02
07:51:57
07:52:02
08:52:40
08:52:50
08:52:55
08:52:40
08:52:50
08:52:55
08:52:40
08:52:50
08:52:55
Traceback (most recent call last):
File "<ipython-input-3-b3aa9a745687>", line 1, in <module>
runfile('/Users/mss/.spyder/temp.py', wdir='/Users/mss/.spyder')
File "/Users/mss/opt/anaconda2/lib/python2.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "/Users/mss/opt/anaconda2/lib/python2.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 102, in execfile
builtins.execfile(filename, *where)
File "/Users/mss/.spyder/temp.py", line 28, in <module>
date_str = item.get('date')
AttributeError: 'unicode' object has no attribute 'get'
Я не уверен, почему он останавливается между тем, как он первоначально предоставлял мне даты, но после некоторого зацикливания он останавливается и начинает говорить, что «объект Unicode» не имеет атрибута «get». Но, как вы можете видеть, он напечатал несколько дат до отображения этой ошибки.
Это то, что мой item выглядит так (для элемента в s:):
{u'delivered': u'yes', u'versionCode': u'2.2', u'date': u'2019-09-08', u'containerGiven': u'0', u'items': [{u'unit_name': u'ML', u'pricr_per_package': 19, u'name': u'NANDINI TONED', u'containerGiven': u'0', u'sub_id': 299, u'quantity_child': 1, u'containerCollect': u'0', u'modify_data': 0, u'pro_price': 0, u'child_package_qty': 500, u'type': u'subscription', u'id': 578, u'quantity': 1}], u'totalOrderSubscriptionPrice': u'19.0', u'userId': u'989', u'containerCollect': u'0', u'time': u'06:29:58', u'custom_ids': u'[]', u'schdule_id': 54, u'subscription_ids': u'[299]'}
Я могу выглядеть глупо. Но дело в том, что я очень новичок в Python. Пожалуйста, дайте мне знать причину, по которой это происходит. Любая помощь будет принята с благодарностью !!!!