11
votes

Utilisation de la plate-forme multiples de Python Spinve

J'espère un peu de conseils sur les tablettes / bases de données en Python

Problème:. J'ai une base de données créée sur le mac, que je veux utiliser sur Windows 7. J'utilise Python 3.2, Mac OS 10.7, et gagner 7. p>

Quand j'ouvrir et enregistrer mon étagère sur le mac tout est bon et bien. Je reçois un fichier avec une extension « .db ». Sur mon windows-python, il est pas reconnu. Je peux cependant créer un nouveau db sur le PC et obtenir des fichiers avec « .bak, dat, .dir » extensions. P>

Je suppose que le python sur le PC n'a pas la même base de données sous-jacente que mes usages mac-python? P>

Je ne suis pas sûr de la bonne approche, mais peut-être je pouvais: p>

Modifier la valeur par défaut-db qui utilise mes systèmes? Découvrez quelle base de mes applications mac-python et ajouter que sur le PC? Changer la façon dont je stocker mes données tous ensemble? P>

La vitesse est pas un problème, le datasize est quelques méga-octets, et il n'accède très souvent. P>

L'espoir de trouver un coup de main là-bas. Merci à l'avance - toute aide est très appréciée p>

/ Esben p>

Ce que je fais: p>

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


1 commentaires

Que voulez-vous dire quand vous dites que cela n'est pas reconnu sous Windows? Comment essayez-vous d'ouvrir le fichier? Pouvez-vous montrer un exemple de code?


3 Réponses :


1
votes

module SQLITE3 est un module de plate-forme croisé qui est même pris en charge par de nombreuses autres langues et outils.

Le module de cornichon est plus simple, mais aussi une plate-forme transversale. Vous lui donnez un objet et il le décharge dans un fichier. Pas de tables ou de lignes telles que SQLite.


2 commentaires

Le cornichon est probablement la voie à suivre. J'ai juste aimé l'idée de tout avoir dans un seul fichier. N'est-il pas possible de forcer le python à utiliser un DB spécifique pour l'étagère, qui est une plate-forme croisée?


Vous ne devriez rencontrer aucun problème de nom de fichier avec cornichon car vous manipuliez ceux qui sont seuls.



3
votes

Merci pour votre réponse!

Je semble que les étagères en python ne sont pas facilement forcées d'utiliser une DB spécifique, mais des cornichons fonctionne comme un charme. Au moins de Mac OS -> Windows 7.

Réponse si courte: Si vous voulez une portabilité, n'utilisez pas d'étagères, utilisez des cornichons directement.

/ esben


0 commentaires

0
votes

J'ai rencontré le même problème et j'ai mis en œuvre une classe basée sur la dicale qui prend en charge le chargement et l'écriture du contenu de la dicte de la dicte et sur le disque.

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}")


0 commentaires