Py学习  »  Python

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

Tomás Jullier • 3 年前 • 1371 次点击  

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

我非常感谢你的帮助

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133674
 
1371 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Patrick
Reply   •   1 楼
Patrick    3 年前

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

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

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

Barmar
Reply   •   2 楼
Barmar    3 年前

在中打开文件时 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)