簡體   English   中英

使用python擱置跨平台

[英]Using python shelve cross-platform

我希望對 Python 中的書架/數據庫有一些建議。

問題:我在 Mac 上創建了一個數據庫,我想在 Windows 7 上使用它。我使用 Python 3.2、MacOS 10.7 和 win 7。

當我在 Mac 上打開並保存我的書架時,一切都很好。 我得到一個帶有“.db”擴展名的文件。 在我的 windows-python 上,它無法識別。 但是,我可以在 PC 上創建一個新數據庫並獲取帶有“.bak、dat、.dir”擴展名的文件。

我猜電腦上的python沒有我的mac-python使用的相同底層數據庫?

我不確定這里哪種方法是正確的,但也許我可以:

更改我的系統使用的默認數據庫? 找出我的 mac-python 使用哪個數據庫並將其添加到 PC 上? 改變我存儲數據的方式?

速度不是問題,數據大小只有幾兆字節,而且訪問頻率不高。

希望能在那里找到幫助之手。 提前致謝 - 非常感謝任何幫助。

/埃斯本

我在做什么:

Import shelve
db = shelve.open('mydb')
entries = db['list']
db.close

很簡單,我在 mac 上有一個名為“mydb.db”的工作數據庫文件,但是當我嘗試在 pc-python 上打開它時,我得到:

回溯(最近通話最后一個):文件“/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/dbm/初始化的.py”,線路107,在whichdb F = io.open(文件名+“ .pag", "rb") IOError: [Errno 2] 沒有這樣的文件或目錄:'mydb.pag'

感謝你的回復!

我似乎在 python 中的架子不容易強制使用特定的數據庫,但是泡菜就像一個魅力。 至少從 mac os -> windows 7。

所以簡短的回答:如果你想要便攜,不要用架子,直接用泡菜。

/埃斯本

sqlite3 模塊是一個跨平台模塊,甚至被許多其他語言和工具支持。

pickle 模塊更簡單,但也是跨平台的。 你給它一個對象,它把它轉儲到一個文件中。 沒有像 sqlite 那樣的表或行。

我遇到了同樣的問題並實現了一個基於 dict 的類,該類支持從磁盤加載和寫入 dict 的內容。

from pathlib import Path
import pickle


class DiskDict(dict):
    def __init__(self, sync_path: Path):
        self.path = sync_path

        if self.path.exists():
            with open(self.path, "rb") as file:
                tmp_dct = pickle.load(file)
                super().update(tmp_dct)
                print(f"loaded DiskDict with {len(tmp_dct)} items from {self.path}")

    def sync_to_disk(self):
        with open(self.path, "wb") as file:
            tmp_dct = super().copy()
            pickle.dump(tmp_dct, file)
            print(f"saved DiskDict with {len(tmp_dct)} items to {self.path}")

您可以嘗試使用pysos ,它是一個輕量級的貨架替代品,也是跨平台的。

使用pip install pysospip install pysos

用法示例:

import pysos

db = pysos.Dict('myfile.db')
db['hello'] = 'persistence!'
db.close()

優點還在於,所有內容都包含在這個單個文件myfile.db因此您可以輕松地復制它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM