我需要用 python 替换 SQL 文件中的某个数字
I need to replace a certain number in a SQL file with python
我在 sql 文件中有这个简单的 sql 查询:
SELECT * FROM public.flores_comahue
WHERE codigo_postal::int > 7000
在这种情况下,我需要替换数字 7000,但它可以是任何其他数字。
我试过了,但显然没有用:
fin = open("prueba.sql", "r")
fout = open("prueba.sql", "w")
for line in fin:
for i in line:
if isinstance(i, int):
fout.write(fout.replace(i, 5))
fin.close()
fout.close()
非常感谢您的帮助
当您以 w
模式打开文件时,文件会被截断。所以你在读取之前清空了文件。
您应该将读取和写入分开进行 -- 首先读取整个内容,然后打开它进行写入。
另一个问题是您的 for i in line:
循环。 line
是一个字符串,所以 i
是一个字符(只有一个元素的字符串)。它永远不会是 int
.
您可以使用正则表达式查找数字并替换它。
import re
with open("prueba.sql", "r") as fin:
contents = fin.read()
contents = re.sub(r'\b\d+\b', '5000', contents)
with open("prueba.sql", "w") as fout:
fout.write(contents)
如果您是 运行 来自脚本的查询,则像下面这样的函数可能是更改查询的更有用的方法
import pyodbc
def run_query(number):
query = f"SELECT * FROM public.flores_comahue WHERE codigo_postal::int > {number}"
conn = pyodbc.connect(server_connection) # some connection
results = pd.read_sql_query(query, conn) # run query
conn.close()
return restults
这只是如何完成此操作的一个示例,但通常构造一个查询字符串应该可以解决您的问题
我在 sql 文件中有这个简单的 sql 查询:
SELECT * FROM public.flores_comahue
WHERE codigo_postal::int > 7000
在这种情况下,我需要替换数字 7000,但它可以是任何其他数字。 我试过了,但显然没有用:
fin = open("prueba.sql", "r")
fout = open("prueba.sql", "w")
for line in fin:
for i in line:
if isinstance(i, int):
fout.write(fout.replace(i, 5))
fin.close()
fout.close()
非常感谢您的帮助
当您以 w
模式打开文件时,文件会被截断。所以你在读取之前清空了文件。
您应该将读取和写入分开进行 -- 首先读取整个内容,然后打开它进行写入。
另一个问题是您的 for i in line:
循环。 line
是一个字符串,所以 i
是一个字符(只有一个元素的字符串)。它永远不会是 int
.
您可以使用正则表达式查找数字并替换它。
import re
with open("prueba.sql", "r") as fin:
contents = fin.read()
contents = re.sub(r'\b\d+\b', '5000', contents)
with open("prueba.sql", "w") as fout:
fout.write(contents)
如果您是 运行 来自脚本的查询,则像下面这样的函数可能是更改查询的更有用的方法
import pyodbc
def run_query(number):
query = f"SELECT * FROM public.flores_comahue WHERE codigo_postal::int > {number}"
conn = pyodbc.connect(server_connection) # some connection
results = pd.read_sql_query(query, conn) # run query
conn.close()
return restults
这只是如何完成此操作的一个示例,但通常构造一个查询字符串应该可以解决您的问题