Python中运行SQL代码时f'''与r'''的差异及适用场景
Python中f-string与原始字符串的区别及适用场景
核心区别
- f-string(f'''/f"""):属于格式化字符串,会主动解析字符串内的
{变量/表达式},将其替换为对应的值;同时会处理标准转义字符(比如\n解析为换行、\t解析为制表符)。 - 原始字符串(r'''/r"""):完全保留字符串的原始内容,不会解析任何转义字符(
\n就是字面的\和n),也不会处理{...}格式的变量替换,所有字符原封不动输出。
各自适用场景
f-string适合的场景
当你需要把Python变量、计算结果动态嵌入字符串时,用f-string最简洁直观:
table_name = "user_info" date = "2024-05-20" query = f''' with a as ( select * from {table_name} where create_date = '{date}' ) '''
这种场景下,{table_name}和{date}会被替换成变量的实际值,实现动态SQL生成。
原始字符串适合的场景
- 无需嵌入变量的静态文本:比如固定SQL语句,用原始字符串可以避免f-string误解析SQL中可能存在的
{}(比如某些SQL函数或语法里的大括号),防止出现变量未定义的错误。 - 含大量转义字符的文本:比如正则表达式、Windows文件路径:
- 正则示例:用原始字符串无需把
\d写成\\d,直接写r"\d+"就能匹配数字,避免转义混乱。 - 文件路径示例:
r"C:\Users\name\file.txt",不用把\写成\\。
- 正则示例:用原始字符串无需把
关于原始字符串与正则表达式
完全适用,而且强烈推荐用原始字符串编写正则表达式。
正则语法里大量用到\做转义(比如\s匹配空白、\w匹配单词字符),如果不用原始字符串,Python会先把\当作自身的转义字符处理,导致正则表达式失效。比如"\d+"会被Python解析为d+(因为\d不是Python的有效转义,会被忽略),而r"\d+"则会被正则引擎正确识别为匹配一个或多个数字。
内容的提问来源于stack exchange,提问作者user2543622
相关产品推荐
相关产品推荐

