我认为 cur.mogrify() 不正确地将一些 's 注入到它生成的字符串中。我正在尝试编写一个很小的 ORM 供个人使用,但我遇到了这种似乎可能是错误的行为:
class BaseModel():
def __init__(self):
self.id = None
@classmethod
def find(cls, id):
sql = 'SELECT * FROM %s WHERE id = %s'
print (cls.table_name)
sql = cur.mogrify(sql, (cls.table_name, id))
return sql
class TestModel(BaseModel):
table_name = 'test_models'
def __init__(self, attrs):
self.test_field = attrs["test_field"]
super().__init__()
python3 -i 模型.py
>>> TestModel.find(1)
test_models
b"SELECT * FROM 'test_models' WHERE id = 1"
>>>
如您所见,之后的第一行TestModel.find(1)
按预期打印了类的表,但是 cur.mogrify 在 test_models 周围放置了 '' ,这导致数据库抛出错误。我通过sql = sql.replace(b"'", b"")
删除 's 解决了这个错误,但我认为这是一个烦人的工作。谁能确认这是一个错误还是我错过了什么?