2016-06-07 1 views
0

나는 pymysql 패키지를 사용하고 있으며 특정 날짜를 나타내는 년, 월, 일 3 개의 숫자 변수를 가져와 사용할 쿼리를 작성해야합니다.파이썬에서의 SQL - 전역 변수 사용하기

이 같이 표시됩니다은 :

INSERT INTO tbl1 

SELECT id, user_id, search_term 
FROM main_table 
WHERE year = (var1) AND month = (var2) AND day = (var3); 

INSERT INTO tbl2 

SELECT id,user_id, find_term 
FROM main_table 
WHERE year = (var1) AND month = (var2) AND day = (var3); 

나는, 2 삽입 절은 같은 VAR1을 사용하는 것입니다 VAR2 필요 내가 쿼리를 실행하기 전에 정의됩니다 VAR3.

효과가 있으려면 - 같은 실행으로해야합니다. (% s)을 사용해 보았습니다.하지만 문제는 python이 6 개의 인자와 3 개의 인자만을 요구합니다 ...

누구에게 도움이 될지 알고 싶습니다. 감사합니다 !!!

+0

작동하지 않는 코드를 표시하십시오. – syntonym

+0

질문을 코드로 업데이트하고 코드로 올바르게 형식을 지정하십시오. – syntonym

+0

수동 서식 지정 대신 cursor.execute를 사용해야합니다. 자세한 내용은 [pep249] (https://www.python.org/dev/peps/pep-0249/#id15)를 참조하십시오. – syntonym

답변

0

당신은 파이썬의 문자열 보간 사용할 수 있습니다 모든

v1 = 2016 
v2 = 6 
v3 = 17 

query = """INSERT INTO tbl1 

SELECT id, user_id, search_term 
FROM main_table 
WHERE year = {var1} 
AND month = {var2} 
AND day = {var3}; 

INSERT INTO tbl2 

SELECT id,user_id, find_term 
FROM main_table 
WHERE year = {var1} 
AND month = {var2} 
AND day = {var3};""".format(var1=v1, var2=v2,var3=v3) 

print(query) 
+0

SQL 쿼리를 수동으로 포맷하는 대신 [cursor.execute] (https://www.python.org/dev/peps/pep-0249/#id15)를 사용해야합니다. 그렇게하면 SQLinjections에서 제외됩니다 (이 경우에도 문제가되지 않더라도). 그리고 진짜 단점도 없습니다. – syntonym

+0

아 참 고맙습니다 - 고마워요! – ryanmc

0

먼저 - 나는 그것이 1 개 쿼리와 함께 잘 작동하는지 말하고 싶습니다. 문제는 2 개 (또는 그 이상)의 쿼리가 있고 파이썬이 너무 많은 변수를 생각할 때 시작됩니다.

이것은 코드입니다.

yesterday = datetime.date.fromordinal(datetime.date.today().toordinal()-1) year_var = yesterday.year month_var = yesterday.month day_var = yesterday.day

이 부분은 3 주어진 PARAMATERS와 쿼리 실행 :

query = INSERT INTO tbl1 SELECT id, user_id, search_term FROM main_table WHERE year = %s AND month = %s AND day = %s ; INSERT INTO tbl2 SELECT id,user_id, find_term FROM main_table WHERE year = %s AND month = %s AND day = %s ;

cursor.execute(query.value,(year_var, month_var, day_var))

내가 시도

이 부분은 3 개 변수를 얻기위한 것입니다 2 insert 절을 사용하여 스크립트를 실행하려면 - 내가 많은 var 이블 즈.

내가 전역 변수의 어떤 종류를 정의하는 대신 %의 것을 사용합니다

...

Wdya은 힘 생각?