[SalesForce] Error “Bind variables only allowed in Apex code” simple_salesforce (Python)

Not sure if this belongs here or in StackOverflow, seems 50/50.

I am trying to figure out how to build a dynamic query using simple_salesforce and there is no problem using a completely static query such as query1() below, however when trying to build the query with variables I receive the error in the question title.

Exception has occurred.
simple_salesforce.exceptions.SalesforceMalformedRequest, Malformed
request
https://myInstance.my.salesforce.com/services/data/v38.0/query/?q=SELECT+Id%2C+FirstName%2C+LastName%2C+Email+FROM+Contact+WHERE+LastName+%3D+%2F%22Jones%2F%22.
Response content: [{'message': '\nEmail FROM Contact WHERE LastName =
/"Jones/"\n ^\nERROR at
Row:1:Column:68\nBind variables only allowed in Apex code',
'errorCode': 'MALFORMED_QUERY'}]

def query1():
    query = "SELECT Id, FirstName, LastName, Email FROM Contact WHERE LastName = 'Jones'"
    sf = connectToSF()
    result = sf.query(query)
    print(json.dumps(result, indent=4))
    // Works perfectly, returns JSON with query results


def query2():
    fields = 'Id, FirstName, LastName, Email'
    obj = 'Contact'
    compare_this = 'LastName'
    to_this = '/"Jones/"'
    query2 = "SELECT {0} FROM {1} WHERE {2} = {3}".format(
        fields, obj, compare_this, to_this)
    sf = connectToSF()
    result2 = sf.query(query2) //Error thrown here
    print(json.dumps(result2, indent=4))

I've tried these permutations with the same error:

to_this = r'Jones'
to_this = r'/"Jones/"'
to_this = '/"Jones/"'
to_this = '"Jones"'

Best Answer

You need it to be a String whose content is wrapped in single quotes ('...').

This approach should work:

to_this = "'Jones'"