2016-06-07 51 views
0

我使用的是pymysql軟件包,需要編寫一個查詢,它將獲得3個數字變量,它們將特定日期表示爲:年份月份和日期 - 並使用它們。Python中的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

您可以使用Python的字符串插值:

所有的
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個(或更多)查詢和python認爲它的變量太多時,問題就開始了。

這是代碼。

這部分是獲得3個變量:

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))

當我嘗試用2個插入子句運行腳本 - 它說我必須有很多var iables。

我需要定義某種全局變量,而不是使用%s的東西...

Wdya認爲可能?