thp / minidb

Store Python objects in SQLite 3. Concise, pythonic API. Easy to write, relatively easy to read. A kind of super simple ORM, if you will. Give it a try.

Home Page:https://thp.io/2010/minidb/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Persistent database acts like In-Memory database

ciscorucinski opened this issue · comments

Summary

It appears that the persistence of the data in a database file is not persistent at all, but all in-memory.

Background

I have created a new Store object with a filename parameter. The database file is created. The code uses a custom class that extends minidb.Model. The data is held in the custom Model class that I created and I can call .save(...) and .load(...) with the correct results outputted to me.

However, when I try to view the data in the database in a 3rd party app. Nothing shows up in the db table!

I tried to only .save(...) the results to the databases in one run-session, and then .load(...) the persisted data in another run-session. However, no data was loaded in my program at all.

Code

This code works and displays the contents of the "database" to the console; however, nothing appears in the database file.

class AndroidStudioRelease(minidb.Model):
    date = str
    name = str
    category = str
    release_type = str
    filename = str
    location = str
    sha256 = str
    filetype = str
    platform = str

...

db = minidb.Store('android-studio-downloads')
db.register(AndroidStudioRelease)

...

release = AndroidStudioRelease(date=date, name=name, category=category, release_type=release_type, filename=filename, location=download_location, sha256=sha256, filetype=filetype, platform=platform)
release.save(db)

...

for release in AndroidStudioRelease.load(db, (AndroidStudioRelease.c.platform == "Linux") & (AndroidStudioRelease.c.category == "Preview")):
    print(release)

Did you call commit and/or close?

Thank you for the quick reply. I was going off of the documentation from the git README file. That didn't state anything about committing or closing. I ended up calling db.close() at the very end and now I can see my data persist in the database!!

It appears even example.py doesn't use commit or close, and I didn't find anything in the documentation about needing those two methods. Did I miss it somewhere?

Good point. Mostly that's because the example by default uses an in-memory database, so no persistence is necessary. I've added a paragraph describing db.close() and db.commit() to the part where the example talks about saving to a file.