def _adapt_from_python(value):
if not isinstance(value, basestring):
adapter_key = (type(value), sqlite3.PrepareProtocol)
adapter = adapters.get(adapter_key)
try:
if adapter is None:
# Fall back to _default_adapters, so that ObjectAdaptationTests
# teardown will correctly restore the default state.
adapter = _default_adapters[adapter_key]
except KeyError as e:
# No adapter registered. Let the object adapt itself via PEP-246.
# It has been rejected by the BDFL, but is still implemented
# on stdlib sqlite3 module even on Python 3 !!
if hasattr(value, '__adapt__'):
adapted = value.__adapt__(sqlite3.PrepareProtocol)
elif hasattr(value, '__conform__'):
adapted = value.__conform__(sqlite3.PrepareProtocol)
else:
raise InterfaceError(e)
else:
adapted = adapter(value)
else:
adapted = value
# The adapter could had returned a string
if isinstance(adapted, (bytes, unicode)):
adapted = _escape_string(adapted)
elif adapted is None:
adapted = 'NULL'
else:
adapted = str(adapted)
return adapted
评论列表
文章目录