I’m currently conducting a PR review and came across this:
value = "" for i in uuids: value = value + "'" + i + "'" + "," where_clause = field + " IN (" + value.rstrip(",") + ")"
Nothing particularly wrong with it but I figure it can be improved using f-strings, join()
and a list comprehension. However it requires me to embed some quotes in my f-string expression and I can’t figure out how to do it.
Here’s a little explainer. I can run this:
uuids = ["a", "b", "c"] field = "myfield" where_clause = f"{field} IN ({', '.join([i for i in uuids])})" where_clause
which returns:
‘myfield IN (a, b, c)’
but that isn’t what’s required. What is required is to return this:
‘myfield IN (“a”, “b”, “c”)’
I’ve been fiddling around with nested f-strings, chr()
& escape characters for about 10 minutes but escape characters fell foul of SyntaxError: f-string expression part cannot include a backslash and I couldn’t figure out the correct incantations to make chr()
work.
If anyone can figure out how to do this I’d be very grateful.
Advertisement
Answer
Actually, this works pretty well, and is “good enough” in this case
uuids = ["a", "b", "c"] field = "myfield" where_clause = f"{field} IN (" + (', '.join([f'"{i}"' for i in uuids])) + ")" where_clause