编写执行python脚本的python代码

时间:2017-10-13 17:04:47

标签: python

我有一个Python文件(sql_script.py),其中包含一些将数据添加/修改到SQL数据库的方法,比如说

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

版本化这个文件会很有用,但我仍然需要根据我的需要修改主代码。

你认为这是一个好习惯吗?你还有其他建议吗?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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库。