У меня есть этот простой 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, и мне нужно менять его каждый раз при его запуске, потому что теоретически я должен взять число из столбца в файле csv и поместить это число в запрос, но эта часть доставляет мне проблемы. извините, если я не уточнил это с самого начала
Когда вы открываете файл в режиме 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
это всего лишь пример того, как это можно сделать, но в целом построение строки запроса должно решить вашу проблему.
Вам нужно менять этот номер каждый раз, когда вы запускаете запрос, и вы запускаете запрос из скрипта Python?