2015-09-14 44 views
2

我有兩個不同的表位於兩個獨立的數據庫,我試圖找出做一些計算的最佳方法。用兩個不同的獨立表格計算最好的方法是什麼?

第一個表包含列:site(varchar 256),網站流量(整數),網站類型(varchar 256)。第二個表包含:站點(varchar 256),每月成本(float),站點類型(varchar 256)。

到目前爲止,我已經有了查詢結果,但是很難理解如何進行實際的分析,這基本上包括網站流量和每月成本的乘積(一個簡單的例子),同時使用網站和類型的網站一鍵

現在,如果這些是在同一個數據庫上的兩個不同的表,我可以做一個簡單的連接,並在我的快樂方式。但是,這是不可能的。因此,我想知道什麼是處理這個問題的最好方法。

我的頭腦風暴主要包括將第一個查詢導出爲csv,然後在第二個數據庫中創建一個臨時表,然後在那裏進行分析。如果有更好的方法來做Python的工作,請讓我知道。

我的代碼:

import pyodbc 

conn = pyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};SERVER=xyx;DATABASE=xxy;UID=xyx;PWD=xyx') 

cursor = conn.cursor() 

cursor.execute("select * from sites;") 

rows = cursor.fetchall() 

with open('file.txt' , 'w') as f: 
    for row in rows: 
     csv.writer(f).writerows(row) 

cursor.close() 
del cursor 
conn.close() 

conn = pyodbc.connect(driver='{Vertica}', server='blah', database='yys', port=5433, 
    uid='zzx', pwd='zzx') 

cursor = conn.cursor() 

cursor.execute("select * from table1;") 

with open('otherfile.txt' , 'w') as f: 
    for row in rows: 
     csv.writer(f).writerows(row) 

cursor.close() 
del cursor 
conn.close() 
+0

可以從第一個鏈接到第二個SQL Server嗎?如果是這樣,那麼您可以暫時將第二個表複製到第一個SQL Server,然後執行聯接。 – RBarryYoung

+1

我不能不幸的是,這就是問題的原因。 –

回答

3

考慮使用Python的數據分析軟件包,pandas可以從SQL數據庫的查詢讀入dataframes。然後通過唯一字段合併兩個數據幀,或者在列名稱對齊時連接兩個數據幀。

此外,您可以用to_csvto_sql在SQL數據庫新表運行其他複雜的分析(即groupbypivot_table)和輸出數據幀。

import pandas as pd 
import pyodbc 

# FIRST DATA FRAME  
conn = pyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};\      
         SERVER=xyx;DATABASE=xxy;UID=xyx;PWD=xyx') 
ssqlsite_df = pd.read_sql("select * from sites;", conn) 
conn.close() 

# SECOND DATA FRAME 
conn = pyodbc.connect(driver='{Vertica}', server='blah', \ 
         database='yys', port=5433, uid='zzx', pwd='zzx') 
vertsite_df = pd.read_sql("select * from table1;", conn) 
conn.close() 

# MERGE DATA FRAMES 
finaldf = merge(ssqlsite_df, vertsite_df, on=['SiteName', 'TypeOfSite']) 

# CONCATENATE/STACK DATA FRAMES 
# (ASSUMING COLUMNS ARE SAME NAME, ADJUST IN QUERY FIELD ALIASES) 
finaldf = concat([ssqlsite_df, vertsite_df], axis=0) 

print(finaldf.head(10)) # FIRST TEN ROWS 

# DATA ANALYSIS 
# CALCULATED COLUMN 
finaldf['SiteCost'] = finaldf['WebsiteTraffic'].convert_objects(convert_numeric=True) * \ 
         finaldf['MonthlyCost'].convert_objects(convert_numeric=True)  
... 

# OUTPUT DATA FRAME 
# CREATES NEW TABLE IF PERMISSION GRANTED. BE SURE TO RE-OPEN CONNECTION. 
# finaldf.to_sql('SiteAnalysis', conn) 

finaldf.to_csv('C:\\Path\\To\\SiteAnalysis.csv') 
+0

我會看看這個包,謝謝+1。 –

相關問題