0

私はPython環境が初めてなので、これを試すために小さなプロジェクトの例を作成しました:

  1. 電話ブランドを作成し、brands.pkl テキスト フィールドに保存します: 「ブランド名」
  2. ドロップダウンを介して以前に作成されたブランドからブランドを選択して電話モデルを作成し、models.pkl テキスト フィールドに保存します: 電話名ドロップダウン: 作成されたブランド。

しかし、それを関連付ける解決策が見つかりませんでした(SQLでは、IDで外部キーを使用できます)。

ありがとうございました。

これが私のコード例です:

def phones(self):

    saved_phones= util.load_phones()

    return json.dumps(saved_phones)

@cherrypy.expose
def new_brands(self, *args, **kwargs):
    try:
        saved_brands = util.load_brands()

        brand = {'name': kwargs['brand_name']}

        try:
            brand['id'] = saved_brands[-1]['id'] + 1
        except IndexError:
            brand['id'] = 1

        saved_brands.append(brand)
        util.save_brands(saved_brands)

        return json.dumps(brand)
    except Exception as e:
        return json.dumps({'error': str(e)})


@cherrypy.expose
def new_phones(self, *args, **kwargs):
    try:
        saved_phones = util.load_phones()

        phone = {'model': kwargs['phone_model']}

        try:
            phone['id'] = saved_module[-1]['id'] + 1
        except IndexError:
            phone['id'] = 1

        saved_phones.append(phone)
        util.save_phones(saved_phones)

        return json.dumps(phone)
    except Exception as e:
        return json.dumps({'error': str(e)})


def save_phones(phones):
    pickle.dump(phones, open('phones.pkl', 'wb'))


def load_phones():
    try:
        saved_phones = pickle.load(open('phones.pkl', 'rb'))
    except IOError:
        saved_phones = []

    return saved_phones

def get_modul(phones, phone_id):
    for phone in phones:
        if phone['id'] == phone_id:
            return phone
        # if
    # for

    return None


def save_brands(brands):
    pickle.dump(brands, open('brands.pkl', 'wb'))


def load_brands():
    try:
        saved_brands = pickle.load(open('brands.pkl', 'rb'))
    except IOError:
        saved_brands = []

    return saved_brands

def get_modul(brands, brand_id):
    for brand in brands:
        if brand['id'] == brand_id:
            return brand
        # if
    # for

    return None
4

1 に答える 1

2

pickle は、あなたが解決しようとしていると思われる問題にはお粗末かもしれません。pickle は、関連するオブジェクトのバンドルを一度に永続化または送信したい場合に意味があります。

多分あなたは本当にSQLデータベースが欲しいですか? sqlite3バインディングはすぐに使用できる python で提供されており、必要に応じて最小限の労力でより堅牢なデータベースに移行できます。

于 2013-01-10T14:11:24.113 に答える