Tom Mikota Posted July 16, 2019 Report Share Posted July 16, 2019 I want to create a project (or Sequence, or Shot, or AssetVersion, etc....) but right now i'm using all kinds of different ways of checking to see if something exists before i create it. I'm guessing there's some simple way of doing this that i'm just not aware of. For instance. To Create a Project Currently I'm doing something like this: project_data = session.query('Project where status is active and name is %s' % 'cgl_unittest2').first() print project_data if not project_data: project_data = session.create('Project', { 'name': 'cgl_unittest2', 'full_name': 'cgl_unittest2', 'project_schema': project_schema }) Problem is when unsuccessful these queries return: None, QueryResult, or sometimes they return an error. So i'm creating all kinds of workarounds for the fact that there is often different results returned depending on the type i'm querying. is there some kind of 'safe' flag on the create() function or some other way of checking to see if something exists before creating it? Link to comment Share on other sites More sharing options...
Tom Mikota Posted July 16, 2019 Author Report Share Posted July 16, 2019 Ok I'm learning more about this already. QueryResult happens when i fail to put .one(), first(), or all() on the end of my query. This is going to make a huge difference moving forward. Going through and fixing some of these right now and tightening up my code. Still curious as to if there's another way other than querying and then creating based off the results. But this is getting cleaner! Link to comment Share on other sites More sharing options...
Tom Mikota Posted July 16, 2019 Author Report Share Posted July 16, 2019 So here's some more information just if anybody is interested: This code is searching for a sequence that doesn't exist: seqs = session.query('Sequence where name is "{0}" and project.id is "{1}"'.format('060', project_data['id'])).first() .first() returns None seqs = session.query('Sequence where name is "{0}" and project.id is "{1}"'.format('060', project_data['id'])).one() .one() returns: Traceback (most recent call last): File "C:/Users/tmiko/PycharmProjects/cglumberjack/src/plugins/project_management/ftrack/ftrack_unit_tests/ftrack_tests.py", line 16, in <module> seqs = session.query('Sequence where name is "{0}" and project.id is "{1}"'.format('060', project_data['id'])).one() File "C:\Users\tmiko\AppData\Roaming\Python\Python27\site-packages\ftrack_api\query.py", line 167, in one raise ftrack_api.exception.NoResultFoundError() ftrack_api.exception.NoResultFoundError: Expected result, but no result was found. This is the one that is screwing me up - so i'll avoid using this .all() returns: [] So that's a good option as well. If i don't have anything telling ftrack what to return i get a QueryResult object This at least demystifies why i'm getting different results. Link to comment Share on other sites More sharing options...
Lorenzo Angeli Posted July 18, 2019 Report Share Posted July 18, 2019 Hi @Tom Mikota, glad to see you managed to get your head around the query system ! overall to keep in mind: <query>.all() --> return all result or an empty list <query>.one() --> return the result or error if not found <query>.first() --> return the result or None if not found You can find more details in our api documetation Hope it helps. L. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now