J'utilise simple_salesforce
pour interroger une base de données relationnelle CRM. Les données sont interrogées avec SOQL
, qui est une variante de SQL
spécifiquement pour Salesforce.Nested OrderedDict à la liste imbriquée avec différents niveaux d'imbrication
Renvoie les dictionnaires ordonnés imbriqués. Sur une "jointure", s'il n'y a pas d'enregistrement, il renvoie None
. S'il y a un enregistrement, un OrderedDict
est renvoyé. La boucle que j'ai n'a pas l'air la plus efficace car elle répète quelques lignes. Je cherche un moyen plus propre d'écrire la boucle.
requête utilisée:
select Id, Subject, Account.Name, Opportunity.Name From Case where ID = '500xxxxxxxxxxxxx'
Code
:
from collections import OrderedDict
od = OrderedDict([
(u'totalSize', 1),
(u'done', True),
(u'records', [OrderedDict([
(u'attributes', OrderedDict([
(u'type', u'Case'),
(u'url', u'/services/data/v29.0/sobjects/Case/500xxxxxxxxxxxxxxxx')
])
),
(u'Id', u'500xxxxxxxxxxxxxxxx'),
(u'Subject', u"Sample Case 1"),
(u'Account', OrderedDict([
(u'attributes', OrderedDict([
(u'type', u'Account'),
(u'url', u'/services/data/v29.0/sobjects/Account/001xxxxxxxxxxxxxxxx')
])
),
(u'Name', u'Sample Account 1')
])),
(u'Opportunity', None)]
)])])
output = []
def get_items(this_item):
for key, value in this_item.iteritems():
if key <> 'attributes':
if type(value) is OrderedDict:
for key, value in value.iteritems():
if key <> 'attributes':
record.append(str(value))
else:
record.append(str(value))
for item in od['records']:
record = []
record.append(get_items(item))
output.append(record)
print output
Sortie:
[['500xxxxxxxxxxxxxxxx', 'Sample Case 1', 'Sample Account 1', 'None']]
s'il vous plaît poster la sortie attendue – MaxU
@MaxU vient de publier sortie et désiré. Merci. – user2242044
Vérifiez simplement le type de 'value' et ne l'imprimez pas s'il s'agit de' collections.OrderedDict' – MaxU