2016-08-24 4 views
0

У меня есть сценарий download.py с:Использование аргументов командной строки в импортируемом модуле

import argparse 
import models 

parser = argparse.ArgumentParser() 
parser.add_argument("--db_path", required=True) 

args = parser.parse_args() 

models.py:

import peewee 

database = peewee.SqliteDatabase("wee.db") 

class Artist(peewee.Model): 
    name = peewee.CharField() 

    class Meta: 
     database = database 

class Album(peewee.Model): 
    artist = peewee.ForeignKeyField(Artist) 
    title = peewee.CharField() 
    release_date = peewee.DateTimeField() 
    publisher = peewee.CharField() 
    media_type = peewee.CharField() 

    class Meta: 
     database = database 

Вместо wee.db Я хотел бы использовать путь к базе данных из args.db_path в download.py файле. Как я могу это сделать?

ответ

0

Все, что вам нужно сделать, это передать ваш аргумент в конструктор SqliteDatabase.

Кажется, что вы используете Django. Если это так, то вы могли бы (и должны) указать вашу базу данных в settings.py, as indicated on the docs.

EDIT

Вот пример кода, как это сделать с помощью существующего кода, как вы предложили (я до сих пор думаю, являются вышестоящие способ сделать это):

models.py:

database_name = "wee_db" 

def set_database_name(name): 
    database_name = name 

database = peewee.SqliteDatabase(database_name) 

download.py:

models.set_database_name(args.db_path) 
+0

Нет, я не использую Django, и когда я прохожу 'args.db_path' я получаю:' NameError: имя 'арг' не определено' –

0

Вот возможное решение:

# download.py 
import argparse 
from models import DBManager 

parser = argparse.ArgumentParser() 
parser.add_argument("--db_path", required=True) 

args = parser.parse_args() 
DBManager(args.db_path) 

# models.py 
import peewee 


class Artist(peewee.Model): 
    name = peewee.CharField() 


class Album(peewee.Model): 
    artist = peewee.ForeignKeyField(Artist) 
    title = peewee.CharField() 
    release_date = peewee.DateTimeField() 
    publisher = peewee.CharField() 
    media_type = peewee.CharField() 


class DBManager(object): 

    def __init__(self, db_path): 
     self.database = peewee.SqliteDatabase(db_path) 

     Artist._meta.database = self.database 
     Album._meta.database = self.database 

     self.database.connect() 
     self.database.create_tables([Artist, Album]) 
+0

@Marcin Doliwa Это сработало для вас? – BPL