3.3. Typing LiteralString

  • Since Python 3.11: PEP 675 -- Arbitrary Literal String Type

3.3.1. SetUp

>>> from typing import LiteralString

3.3.2. Solution

>>> def execute(sql: LiteralString):
...    ...
>>>
>>> username = 'alice'
>>>
>>>
>>> execute('SELECT * FROM users WHERE login="alice"')                         # ok
>>> execute('SELECT * FROM users WHERE login=' + username)                     # ok
>>> execute('SELECT * FROM users WHERE login=%s' % username)                   # error
>>> execute('SELECT * FROM users WHERE login=%(login)s' % {'login': username}) # error
>>> execute('SELECT * FROM users WHERE login={}'.format(username))             # error
>>> execute('SELECT * FROM users WHERE login={0}'.format(username))            # error
>>> execute('SELECT * FROM users WHERE login={login}'.format(login=username))  # error
>>> execute(f'SELECT * FROM users WHERE login={username}')                     # error