Python 함수로 동적 SQL 쿼리 처리
문제.
오늘 업무 중에 저는 아주 재미있는 수요를 만났습니다. 처음에는 도전적으로 보였지만 저는 매우 정태적인 SQL 조회 방법에 있어서 눈을 크게 떴습니다.데이터베이스 조회를 요청받을 때마다 다음과 같이 합니다.
SELECT * FROM details WHERE firstName='John' AND lastName='Doe';
내가 말하고 싶은 것은, 나는 정적 조회를 사용할 것이다. 왜냐하면 나는 항상 매개 변수 (열 이름, 열 값, 그리고 다른 자구) 를 알고 있기 때문이다.그러나 오늘날, 나는 사용자가 입력한 모든 테이블에서만 검색할 수 있기를 기대한다. 즉, 이 테이블의 항목이나 검색 검색을 모르는 상황에서 특정한 테이블을 검색할 수 있다.처음에 사용자 입력을 검색 매개 변수로 사용하려는 생각은 나를 곤혹스럽게 했다.나는 동적 SQL 조회를 사용할 가능성을 모른다. (헤헤, 변호해 줘. 나는 아마추어 백엔드 개발자일 뿐이야.) 그러나 이것은 협상할 수 없는 요구이기 때문에 한번 해 보기로 결정했다.
내가 문제를 해결하는 방법
이 특정 프로젝트에 대해 저는 다음과 합작하고 있습니다.
SELECT * FROM details WHERE firstName='John' AND lastName='Doe';
이 특정 프로젝트에 대해 저는 다음과 합작하고 있습니다.
const res= await axios.get("http://127.0.0.1:8000/application/search/?query=" + JSON.stringify(queryObj));
검색 대상이 어떤 모양인지 알고 싶으면 입력으로 만들어진 검색 예시가 있습니다 -이름: 존
성: 다이
let queryObj={firstName:"John", lastName:"Doe",};
백엔드(Django 응용 프로그램\views.py)에서queryObj는 다음과 같이 처리됩니다.from django.http import JsonResponse
import psycopg2
import ast
def search_table(request):
search_query=request.GET.get('query')
queryparam=ast.literal_eval(search_query)
내가 왜 내장함수ast를 사용했는지 알고 싶지 않기 위해서.여기의literal eval(search query)은 search query가 키 값이 맞는python 사전이 아니라 문자열의 대상이기 때문입니다.이 함수는 search query의 문자열 객체 키를 실제python 사전 키로 변환하는 데 도움을 줍니다.다음으로psycopg2를 사용하여postgresql 데이터베이스와 연결합니다.
from django.http import JsonResponse
import psycopg2
import ast
def search_table(request):
search_query=request.GET.get('query')
queryparam=ast.literal_eval(search_query)
con=psycopg2.connect(database="database_name",user="user_name",password="pwd",host="0.0.0.0",port="12345")
cursor=con.cursor()
and_clause=[]
for k,v in queryparam.items():
and_clause.append("%s = '%s'" % (k,v))
and_clause_str=' AND '.join(and_clause)
sql_query='SELECT * FROM table_name WHERE ' + and_clause_str
print(sql_query)
cursor.execute(sql_query)
result=cursor.fetchall()
return JsonResponse(result)
따라서 이곳의 코드는 매우 자명하지만, 단지 논리를 빨리 이해하기 위해서-나는 SQL 검색처럼 구성할 수 있도록 검색 매개 변수 사전 키를 저장하고 열 이름으로 사용하며, 검색할 매개 변수 사전 값을 검색할 실제 값으로 =로 구분하는 and 자구라는 문자열 목록을 설명했다.
질의 매개변수 사전에 여러 항목이 있는 경우, 즉 사용자가 여러 매개변수나 열을 기반으로 검색을 원할 때 "AND"를 사용하여 이러한 문자열을 연결하고 AND 자문 str라는 새 문자열 변수에 저장합니다.
다음은 최종 SQL 문의 모양입니다.
고려 사항
이 함수는 현재 완전한 동적 조회를 생성하지 않습니다.만약 당신이 주의를 기울였다면, 나는 여전히 표 이름을 지정했고,where 자구도 필요합니다.내가 이렇게 하는 데는 두 가지 이유가 있다.
읽어주셔서 감사합니다!
Reference
이 문제에 관하여(Python 함수로 동적 SQL 쿼리 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bhavanaeh/python-function-to-work-with-dynamic-sql-queries-25gk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)