代码之家  ›  专栏  ›  技术社区  ›  Tomás Jullier

我需要用python替换SQL文件中的某个数字

  •  1
  • Tomás Jullier  · 技术社区  · 2 年前

    我在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()
    

    我非常感谢你的帮助

    2 回复  |  直到 2 年前
        1
  •  3
  •   Barmar    2 年前

    在中打开文件时 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)
    
        2
  •  1
  •   Patrick Павел Гоняев    2 年前

    如果您是从脚本运行查询,那么下面的函数可能是更改查询的更有用的方法

    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
    

    这只是一个如何实现的示例,但一般来说,构造一个查询字符串应该可以解决您的问题