2014-10-08 16 views
0

UPDATE過程SQL查詢中輸入文件與Python

我已經實現了一些新的代碼,現在有一個新的問題:

query_dir = '/path/to/sql' 
sql_commands = []  

with open(inputfile, 'r') as argfile: 
    infiles = argfile.readlines() 

    for infile in infiles: 

     print("infile: {0}".format(infile)) 

     try:  
      infile = os.path.join(query_dir, infile).replace('\n', '') 
      queries = [sqlfile.strip() for sqlfile in open(infile, 'r')] 

     except IOError as e: 
      print("IOError: {0}".format(e)) 

     for query in queries: 
      sql_commands.append(query) 

    print("sql commands: {0}".format(sql_commands)) 

現在,當print語句給SQL命令,該文件的內容是存在的,但格式不適合我。例如,它看起來像這樣:

sql commands: ['-- comment', '', 'select column1, column2,', 
. . . 'from x p', . . .] 

我想獲得的SQL查詢是對輸入文件的一行被格式化命令要運行該文件中:

cursor.execute(command)

從下面...

原始問題

我有嘗試了不同的路徑和位置(包括在輸入文件中使用絕對路徑),我不確定發生了什麼。我試着把所有的文件放在與腳本相同的目錄中,這給了同樣的錯誤。我不知道如何讓SQL文件被解釋爲代碼內部的文件...我有一個文件,對於每行,在文件中有一個SQL查詢:

input。文件:

query_file1.sql 
query_file2.sql 
query_file3.sql 

我有一個Python腳本,需要一個文件(其中之一),在它的SQL查詢和執行查詢並打印它的漂亮版本的輸出,它使用pprintPrettyPrinter

我希望能夠在文件的每一行中放置一個文件名,該文件名中包含SQL查詢,然後使用相同的Python腳本處理該文件。

我遇到了麻煩。我可以打印文件的行,每一行的是SQL查詢語句的輸入文件:

. . . 

with open(inputfile, 'r') as argfile: 
    lines = argfile.readlines() 
    for line in lines: 
     print(line) 

. . . 

我不知道如何去這樣做,這樣我可以用這個片斷:

. . . 

for command in sql_commands: 
    try: 
     pp = pprint.PrettyPrinter(indent=4) 
     cursor.execute(command) 
     pp.pprint(cursor.fetchall()) 

. . . 

我需要將輸入文件的行轉換爲參數,以便我可以使用腳本處理它們。

回答

1
I think you need a list named sql_commands.First you get line in file, 
then store it in a list. 
sql_commands=[] 
with open(inputfile, 'r') as argfile: 
    lines = argfile.readlines() 
    for line in lines: 
     with open(line,'r') as sqlfile: 
      sqls=sqlfile.readlines() 
      for sql in sqls: 
       sql_commands.append(sql) 
+0

謝謝。我試過這個,並導致SQL語法錯誤。看起來文件的標題是命令而不是文件的內容(這是實際的查詢)。我會繼續調整... – nicorellius 2014-10-08 23:00:04

+0

@nicorellius你的意思是query_file1.sql實際上是一個帶有sqlcommands的文件嗎? – AlexWei 2014-10-08 23:09:24

+0

@nicorellius如果我的假設是正確的。你應該打開(line,'r')然後做同樣的事情 – AlexWei 2014-10-08 23:15:12