Как сохранить и извлечь объект python из постоянного хранилища с помощью алхимической фляги - PullRequest
0 голосов
/ 05 марта 2019

Как можно хранить и извлекать объект python в базе данных с помощью sqlalchemy?

Я просматривал документацию, но не вижу ничего, где они хранят больше, чем словари.Мне сказали, что SQLalchemy имеет возможность хранить объект Python, но я еще не видел его.Кто-нибудь знает пример того, как это делается?

Ниже приведен пример того, как я думал, что это может работать, но я не верю, что возможно добавить объект Python в качестве столбца.

Persistance_dreams.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

# Create our database model
class User(db.Model):
    """ User Model for python objects to a user name """
    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(255), unique=True, nullable=False)

    def __init__(self, name):
        self.name = name

    # create function to add python object
    def add_python_object(self, object_to_store):
        persistent_python_object = db.Column() # <-- would like to add python object here
        self.persistent_python_object = object_to_store

# Define our object we would like to store
class ExampleObject(object):

    def __init__(self, val_1, val_2):
        self.val_1 = val_1
        self.val_2  = val_2

    def does_something_from_storage(self):
        return self.val_1 + self.val_2

# Create user
adder = User('Adder')
adder.add_python_object(ExampleObject(3,4))

# Add to database
db.session.add(adder)
db.session.commit()

# Retrieve python object
user = User.query.filter_by(name='Adder').first()
result = user.persistent_python_object.does_something_from_storage()

1 Ответ

0 голосов
/ 07 марта 2019

Как отметил @Andrew Allen, SQLAlchemy на самом деле поставляется со столбцом pickleType, который можно использовать для сериализации объектов Python.

Persistance_reality.py

from flask import Flask
from flask_bcrypt import Bcrypt
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

db.create_all()
# Create our database modl
class User(db.Model):
    """ User Model for storing user related details """
    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(255), unique=True, nullable=False)
    python_object = db.Column(db.PickleType(), nullable=True)


    def __init__(self, name):
        self.name = name

    # create funciton to add python object
    def add_python_object(self, object_to_store):
        persistent_python_object = db.Column() # <-- would like to add python object here
        self.persistent_python_object = object_to_store

# Define our object we would like to store
class ExampleObject(object):

    def __init__(self, val_1, val_2):
        self.val_1 = val_1
        self.val_2  = val_2

    def does_something_from_storage(self):
        return self.val_1 + self.val_2

# Create user
adder = User('Adder')
adder.add_python_object(ExampleObject(3,4))

# Add to database
db.session.add(adder)
db.session.commit()

# Retrieve python object
user = User.query.filter_by(name='Adder').first()
result = user.persistent_python_object.does_something_from_storage()
...