[英]Executing SQL with “ ” from Python
由于选择中的“”,我无法从Python执行SQL语句。 我想我已经尝试了每种组合,但无法弄清楚。 你能帮我么?
cnxn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\python33\salesdb.mdb")
cursor = cnxn.cursor()
v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)="Robert Smith" ))"
cursor.execute(v_sql)
问题在于SQL中的Robert Smith。
您将转义引号或使用其他引号样式。 例如,单引号将在此处执行。
使用单引号:
v_sql = 'SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)="Robert Smith" ))'
使用转义:
v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)=\"Robert Smith\" ))"
或者,您可以使用三重引号( '''
或"""
);由于允许使用换行符并将其包含在最终的字符串值中,因此这些引号允许使用简单的多行字符串:
v_sql = """
SELECT DISTINCT tblSeller.ID, tblSeller.Navn
FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID
WHERE (((tblSeller.Name)=\"Robert Smith\" ))
"""
尝试混合使用单引号:
v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)='Robert Smith' ))"
要么
v_sql = 'SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)="Robert Smith" ))'
在python中,字符串可以用双引号"
或单引号"
引起'
,这在这些情况下非常有用。
在Python中,你可以使用创建的字符串'
或"
其他说。
但是在这种情况下,我想建议使用PreparedStatement而不是简单查询。 这样的PreparedStatement用途是?
代替参数,参数只是数组:
v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)=?))"
rs = c.execute(v_sql, ["Robert Smith", ])
PreparedStatement具有许多优点:数据库引擎可以更轻松地解析它们并缓存查询计划,它们可以安全地进行SQLInjection攻击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.