Tôi hơi bối rối vì sao tôi nhận được lỗi AttributeError: đối tượng 'module' không có thuộc tính 'strptime'. Khi tôi nhập datetime trong kịch bản Python của tôi và gọi datetime.datetime.strptime (chuỗi, định dạng) mọi thứ hoạt động tốt nhưng khi tôi viết từ datetime import datetime và gọi datetime.strptime (string, format) script của tôi bị lỗi với lỗi trên. Tôi tốt bằng cách sử dụng datetime nhập khẩu và gọi datetime.datetime nhưng tôi vẫn tò mò là tại sao từ datetime nhập datetime đổ vỡ vào cuộc gọi datetime.strptime (string, format). Bất kỳ ý tưởng nào về lý do tại sao điều này có thể xảy ra? Mã của tôi là dưới đây ...AttributeError: đối tượng 'module' không có thuộc tính 'strptime' - Lỗi có thể xảy ra?
Bulkolader.yaml
python_preamble:
- import: re
- import: base64
- import: hs_transformers
- import: google.appengine.ext.db
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard
- import: google.appengine.api.datastore
transformers:
- kind: HBO
connector: csv
property_map:
- property: __key__
external_name: swfServerID
import_transform: hs_transformers.string
- property: IP_address
external_name: IP
import_transform: hs_transformers.string
- property: name
external_name: swfServer
import_transform: hs_transformers.swfServer
- property: checkin
external_name: clockStampOfLastCheckin
import_transform: hs_transformers.date_time
- property: update
external_name: clockStampOfLastUpdate
import_transform: hs_transformers.clockStampOfLastUpdate
- property: form_factor
external_name: formFactor
import_transform: hs_transformers.string
- property: serial_number
external_name: serialNumber
import_transform: hs_transformers.string
- property: reverse_SSH
external_name: allowReverseSSH
import_transform: hs_transformers.boolean
- property: insight_account
external_name: FK_insightAccountID
import_transform: hs_transformers.integer
- property: version
external_name: ver
import_transform: hs_transformers.string
hs_transformers.py
import re
import logging
from datetime import datetime
from shared.datastore import *
import google.appengine.ext.bulkload.transform
from google.appengine.api import memcache
def clockStampOfLastUpdate(passed_clockstamp):
try:
if passed_clockstamp != "NULL":
datetime_object = date_time(passed_clockstamp)
return_file_update = memcache.get(str(datetime_object), namespace = "HBOImport")
if not return_file_update:
return_file_update = FileUpdate.lastBefore(datetime_object)
memcache.set(str(datetime_object), return_file_update, namespace = "HBOImport", time = 20)
if return_file_update != None: return return_file_update.key()
except Exception, e:
logging.error(e)
def string(passed_string):
try:
if passed_string != "NULL": return passed_string
except Exception, e:
logging.error(e)
def swfServer(passed_url):
try:
if passed_url != "NULL": return passed_url.split('//', 1)[1].split('.')[0]
except Exception, e:
logging.error(e)
def date_time(passed_datetime):
try:
if passed_datetime != "NULL": return datetime.strptime(passed_datetime, '%m/%d/%y %H:%M')
except Exception, e:
logging.error(e)
def boolean(passed_boolean):
try:
if passed_boolean != "NULL":
if passed_boolean == "T": return True
if passed_boolean == "F": return False
except Exception, e:
logging.error(e)
def integer(passed_integer):
try:
if passed_integer != "NULL": return int(passed_integer)
except Exception, e:
logging.error(e)
lỗi cmd ...
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Jack Frost>cd "C:\Program Files (x86)\Google App Engine SDK"
C:\Program Files (x86)\Google App Engine SDK>python appcfg.py upload_data --url=http://bulkloader-testing.appspot.com/remote_api --config_file="C:\Users\Jack Frost\Eclipse Workspace\Headsprout\GAE 2.1.2012\src\utilities\bulkloader\bulkloader.yaml" --filename="C:\Users\Jack Frost\Eclipse Workspace\Headsprout\GAE 2.1.2012\src\utilities\bulkloader\csv_files\small_hbos.csv" --kind=HBO
Uploading data records.
[INFO ] Logging to bulkloader-log-20120207.105053
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
[INFO ] Opening database: bulkloader-progress-20120207.105053.sql3
[INFO ] Connecting to bulkloader-testing.appspot.com/remote_api
[INFO ] Starting import; maximum 10 entities per post
PASSED DATETIME 2/1/12 17:52
TYPE <type 'unicode'>
[ERROR ] [WorkerThread-0] WorkerThread:
Traceback (most recent call last):
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\adaptive_thread_pool.py", line 176, in WorkOnItems
status, instruction = item.PerformWork(self.__thread_pool)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\bulkloader.py", line 764, in PerformWork
transfer_time = self._TransferItem(thread_pool)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\bulkloader.py", line 933, in _TransferItem
self.content = self.request_manager.EncodeContent(self.rows)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\tools\bulkloader.py", line 1394, in EncodeContent
entity = loader.create_entity(values, key_name=key, parent=parent)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 445, in create_entity
entity = self.dict_to_entity(input_dict, self.bulkload_state)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 147, in dict_to_entity
self.__run_import_transforms(input_dict, instance, bulkload_state_copy)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 252, in __run_import_transforms
value = self.__dict_to_prop(transform, input_dict, bulkload_state)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_config.py", line 207, in __dict_to_prop
value = transform.import_transform(value)
File "C:\Program Files (x86)\Google App Engine SDK\google\appengine\ext\bulkload\bulkloader_parser.py", line 111, in __call__
return self.method(*args, **kwargs)
File "C:\Users\Jack Frost\Eclipse Workspace\Headsprout\GAE 2.1.2012\src\utilities\bulkloader\hs_transformers.py", line 44, in date_time
print datetime.strptime(passed_datetime, '%m/%d/%y %H:%M')
AttributeError: 'module' object has no attribute 'strptime'
[INFO ] [WorkerThread-1] Backing off due to errors: 1.0 seconds
[INFO ] An error occurred. Shutting down...
[ERROR ] Error in WorkerThread-0: 'module' object has no attribute 'strptime'
[INFO ] 10 entities total, 0 previously transferred
[INFO ] 0 entities (1516 bytes) transferred in 3.0 seconds
[INFO ] Some entities not successfully transferred
Gọn gàng. Bạn biết rõ cách giải quyết mà bạn phải sử dụng, và chỉ tò mò là tại sao đây là trường hợp (như tôi). Tôi đã dành một số thời gian đào bới xung quanh trong các cơ chế nhập khẩu của Python 2.x và tôi có thể nói với bạn rằng nói chung, rõ ràng (ví dụ: "nhập" ngày giờ "nhập" từ datetime import datetime ") né tránh nhiều vấn đề lạ. Tôi không thể cho bạn biết tại sao vấn đề cụ thể này lại xuất hiện cho bạn, ngoại trừ suy đoán rằng có lẽ một số mã Google AppEngine đang gây rối với hàng nhập khẩu. – mattbornski
Có, tôi chỉ tò mò là tại sao tôi phải sử dụng một dòng nhập khẩu trên khác khi về mặt kỹ thuật cả hai đều nên làm việc. Giả định của tôi là một trong các câu lệnh nhập trong tệp .yaml của tôi đang nhập một tập lệnh khác (một trong các tập lệnh của Google) đang sử dụng dòng từ datetime nhập ngày giờ và kết quả là nó gây ra tương tác lạ giữa hai tập lệnh. –