2017-10-13 111 views
-1

我有一些方法來添加/修改數據到一個SQL數據庫Python文件(sql_script.py),說編寫Python代碼執行的Python腳本

  • import_data_into_specifications_table
  • import_data_into_linkage_table
  • truncate_linkage_table
  • ....(do_other_stuff_on_db)
  • connect_db

有時候,我不得不打電話給只有一個方法,另一些人幾個人

的到現在爲止我所做的是根據修改的主要方法是什麼,我需要做的:

if __name__ == '__main__': 
    conn = connect_db() 
    import_data_into_specifications_table(conn= conn) 
    import_data_into_linkage_table(conn=conn) 
    conn.close() 

但我發現它是一種不好的做法,因爲我必須記住在提交代碼之前刪除主文件

一個可能的選項可能是編寫一個外部python文件,例如launch_sql_script.py),其中我寫了所有可能的方法組合我必須跑,說:

def import_spec_and_linkage(): 
    conn = connect_db() 
    import_data_into_specifications_table(conn= conn) 
    import_data_into_linkage_table(conn=conn) 
    conn.close() 

... 
if __name__ == '__main__': 
    import_spec_and_linkage() 

它可能是有用的版本此文件,但仍然需要根據我需要做的修改主代碼。

您認爲這是一個很好的做法嗎?你有什麼其他的建議?

回答

1

最簡單的方法是使用程序參數機制:在腳本執行期間描述預期的操作。

sys.argv

獲取偷看這裏是從零開始:

def meow(): 
    print("Meow!") 
def bark(): 
    print("Bark!") 
def moo(): 
    print("Moo!") 

actions = { 
    "meow": meow, 
    "bark": bark, 
    "moo": moo, 
} 

from sys import argv 
actions[argv[1]]() 

如果你要解析複雜的程序參數,看看argparse庫。

1

選項1:將它們分開成獨立的腳本和運行每個命令行

# import_data_into_specifications_table.py 
if name == '__main__': 
    conn = connect_db() # import from a shared fiel 
    import_data_into_specifications_table(conn= conn) 


# in bash 
$ import_data_into_specifications_table 

選項2:編寫一個文件解析命令行參數

# my_sql_script.py 
if name == '__main__': 
    conn = connect_db() 

    if args.spec_table: # use argumentparser to get these 
     import_data_into_specifications_table(conn=conn) 
    if args.linkage_table: 
     import_data_into_linkage_table(conn=conn) 
    ... 

# in bash 
$ my_sql_script.py --spec_table --linkage_table 

如果我贊成選項2操作順序無關緊要或始終保持不變。如果有很多排列,我會選擇1.