2017-07-18 49 views
0

我已經創建了一個腳本來從db中提取數據並輸出到管道文本文件。不過,現在我想擁有用戶提供的ID,然後使用用戶輸入的查詢中的像Python,Pandas,Sqlalchemy:在查詢中使用input()中的值

engine1 = create_engine() 
ids=input("Enter the IDs needed for file generation: ") 
print("extracting the data for ", ids) 
stext=text("SELECT * FROM table WHERE data IN ids") 
data1 = pd.read_sql(stext, con=engine1) 
data1.to_csv('new.txt',sep='|',encoding='utf8',index=False,line_terminator='||\n') 

IDS將是一個查詢列表像(「ID1」,ID2' ,‘ID3’ )

+0

您不需要再次將data1作爲數據幀。它是來自read_sql的數據框。 – Kosch

+0

好的,糾正了刪除冗餘 - 如何回答實際緊迫的問題:) – PeaceTree

+0

您使用的數據庫是什麼?這是你問題中最重要的部分。 – Kosch

回答

0

參數的語法會根據您的數據庫而不同,但您的SQL需要看起來像這樣。

SQL

ids=input(SELECT * FROM table WHERE data IN (:ids)) 


    -- without knowing your DB this is psuedo code. 
    -- In postgres you might be able to use ANY(ARRAY) and use native postgres any python arrays 

的Python代碼會是這樣的

data1 = pandas.read_sql_query(
          sa.text(ids), 
          con=conn, 
          params={ 
           'ids' : [1,2,3,4,5] 
          } 
        ) 

...也 read_sql返回一個數據幀

data1 = pd.read_sql(stext, con=engine1) 


data1.to_csv('new.txt',sep='|',encoding='utf8',index=False,line_terminator='||\n') 

http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_sql.html

+0

@ Kosch - 對不起,我以爲我把它放在那裏 - 我使用cx_Oracle連接到Oracle數據庫引擎,如engine1 = create_engine(「oracle + cx_oracle:............. – PeaceTree

+0

另外,我不知道用戶會給出多少個ID值 - 可能是1或5或100等。 – PeaceTree

0

我已經解決了這裏一半的問題是代碼,但運行到以下問題:如果我給輸入多個值,它不返回的結果,讓1號工作在這個代碼

def extractPcFile(): 
pd.set_option('display.float_format', lambda x: '%.0f' % x) 
dsn = "oracle+cx_oracle://)))" 
engine = create_engine(dsn) 
session = sessionmaker(bind=engine) 
connection = engine.connect() 
session = session(bind=connection) 
metadata = MetaData() 
Base = declarative_base() 
hcids=input("Enter the HCIDs needed for PC file generation:") 
print("extracting the data for ", hcids) 
sql = ("select * from table where HCID in (:hcids)") 
result=engine.execute(sql, hcids,).fetchall() 
print(result) 
extractPcFile() 

誰能幫忙?

+0

隨着您繼續朝着解決方案邁進,請通過更新和說明來編輯原始問題,以便貢獻者可以找到最近的問題 –