Salesforce对象查询语言(SOQL)的模型和查询生成器
soql的Python项目详细描述
这个包为salesforce对象提供声明性模型,并为从这些模型生成Salesforce Object Query Language (SOQL)查询提供实用程序。
这个包与Simple Salesforce配合得很好。
用法
fromsimple_salesforceimportSalesforcefromsoqlimportattributesfromsoqlimportload_models_from_salesforce_datafromsoqlimportModelfromsoqlimportselectclassAccount(Model):id=attributes.String('Id')deleted=attributes.Boolean('IsDeleted')name=attributes.String('Name')owner=attributes.Relationship('Owner',related_model=User)custom_field=attributes.String('CustomField__c',nullable=True)classUser(Model):id=attributes.String('Id')email=attributes.String('Email')sf=Salesforce(...)query=select(Account) \ .where(Account.id=='50130000000014c') \ .join(Account.owner)resp=sf.query(str(query))account=load_models_from_salesforce_data(resp)[0]print(account.id)print(account.owner.id)
型号
模型定义salesforce对象的内存表示,并提供一种惯用的方法来访问数据。
fromsoqlimportattributesfromsoqlimportModelclassUser(Model):# The first argument to an attribute is its name in Salesforce.id=attributes.String('Id')email=attributes.String('Email')user=User(id='123',email='a@b.com')assertuser.id=='123'
助手可以直接从simple_salesforce:
加载模型query=select(User)resp=sf.query(str(query))users=load_models_from_salesforce_data(resp)
关系也可以声明:
classAccount(Model):id=attributes.String('Id')owner=attributes.Relationship('Owner',related_model=User)contacts=attributes.Relationship('Contacts',related_model=User,many=True)
查询
可以从模型生成soql查询:
fromsoqlimportselectquery=select(User).where(User.id=='123')assertstr(query)=="SELECT User.Id, User.Email FROM User WHERE User.Id = '123'"
支持大多数soql,包括…
连接:
fromsoqlimportselectquery=select(Account).join(Account.contacts)assertstr(query)=="SELECT Account.Id, (SELECT User.Id, User.Email FROM Account.Contacts) FROM Account"
子查询:
fromsoqlimportselectsubquery=select(User).columns(User.email).subquery()query=select(User).where(User.email.in_(subquery))assertstr(query)=="SELECT User.Id, User.Email FROM User WHERE User.Email IN (SELECT User.Email FROM User)"
还有更多!
安装
pip install soql
贡献
还有工作要做,鼓励大家贡献!查看contribution guide了解更多信息。