Mysql 插入查询是否需要三个引号?

Mysql 插入查询是否需要三个引号?,mysql,python-3.x,mysql-connector,Mysql,Python 3.x,Mysql Connector,我经常看到(在本论坛和其他地方)SQL insert查询用三个连续的引号括起来,例如: query = """INSERT INTO test (value0, value1) VALUES (%s, %s)""" mycursor.execute(query, ("foo","bar")) 我希望能够迭代表名。因此,当我只使用一个引号时,查询也同样有效 table1 = "test1" query = "".join(("INSERT INTO ", table1," (value0, v

我经常看到(在本论坛和其他地方)SQL insert查询用三个连续的引号括起来,例如:

query = """INSERT INTO test (value0, value1) VALUES (%s, %s)"""
mycursor.execute(query, ("foo","bar"))
我希望能够迭代表名。因此,当我只使用一个引号时,查询也同样有效

table1 = "test1" 
query = "".join(("INSERT INTO ", table1," (value0, value1) VALUES (%s, %s)"))
mycursor.execute(query, ("foo","bar"))
现在哪种语法正确?

用于跨多行的字符串。它们是用字符串编写可读缩进代码的方便快捷方式。如果您的字符串只是一行,则不需要它们,并且
'abc'=='abc'
(与双引号相同)

请参见以下较长查询字符串的示例:

"select column1, column2, column3 "\
"from table1 t1"\
"  join table2 t2 on t1.some_id_field = t2.another_id_field "\
"where column4 = 1"\
"   and column5 is not null"\
"   -- and so on"
如果您忘记了尾随的
'
(这样您就可以从…获得
…column3from…
)。同样的,三重引号更易于阅读和书写:

"""select column1, column2, column3
   from table1 t1
      join table2 t2 on t1.some_id_field = t2.another_id_field
   where column4 = 1
      and column5 is not null
      -- and so on
"""

附言:代替

table1 = "test1" 
query = "".join(("INSERT INTO ", table1," (value0, anycode) VALUES (%s, %s)"))
我总是用

query = f"INSERT INTO {table1} (value0, anycode) VALUES (%s, %s)"

因为它不仅更易于阅读,而且更不容易忘记表名周围的空格。

只有多行字符串才需要三引号字符串语法。也就是说,它适用于您的第一个版本,但不是必需的。在第二个版本中也没有必要。谢谢你的解释,我很感激。至于f字符串:我不能使用它们,因为它仍然在3.5上,但这确实是一个更好的选择。您仍然可以使用
“插入{}(value0,anycode)值(%s)”。格式(表1)
在3.5上