def test_custom_poolclass(): class _CustomPool(pool.StaticPool): _do_return_conn = mock.MagicMock() db = SQLAlchemy(URI1, poolclass=_CustomPool) db.create_all() _CustomPool._do_return_conn.assert_called_once()
def test_session_options(uri1): class _CustomPool(pool.StaticPool): _do_return_conn = mock.MagicMock() db = SQLAlchemy(uri1, poolclass=_CustomPool) db.create_all() _CustomPool._do_return_conn.assert_called_once()
def test_id_mixin(): db = SQLAlchemy(URI1) class IDMixin(object): id = db.Column(db.Integer, primary_key=True) class Model(db.Model, IDMixin): field = db.Column(db.String) db.create_all() assert Model.__tablename__ == 'models' assert hasattr(Model, 'id')
def test_query(): db = SQLAlchemy(URI1) ToDo = create_test_model(db) db.create_all() db.add(ToDo('First', 'The text')) db.add(ToDo('Second', 'The text')) db.flush() titles = ' '.join(x.title for x in db.query(ToDo).all()) assert titles == 'First Second' data = db.query(ToDo).filter(ToDo.title == 'First').all() assert len(data) == 1
def test_define_table(): db = SQLAlchemy(URI1) db.Table( 'foobar', db.Column('foo', db.UnicodeText), db.Column('bar', db.UnicodeText), ) db.Table( 'fizzbuzz', db.metadata, db.Column('fizz', db.Integer), db.Column('buzz', db.Integer), ) db.create_all()
def test_model_helpers(): db = SQLAlchemy() class Row(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60), nullable=False) created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) db.create_all() db.add(Row(name='a')) db.flush() row = db.query(Row).first() assert str(row) == '<Row>' assert dict(row)['name'] == 'a'
def test_custom_metaclass(): class _CustomMeta(DefaultMeta): def __init__(self, name, bases, dic): DefaultMeta.__init__(self, name, bases, dic) if hasattr(self, 'id'): setattr(self, 'test', 1) db = SQLAlchemy(URI1, metaclass=_CustomMeta) class Model(db.Model): id = db.Column(db.Integer, primary_key=True) db.create_all() assert Model.test == 1
def test_reconfigure(uri1): db = SQLAlchemy(uri1, echo=False) class Bucket(db.Model): id = db.Column(db.Integer, primary_key=True) db.create_all() db.add(Bucket()) db.commit() class CustomQuery(Query): some_attr = 1 db.reconfigure(query_cls=CustomQuery) assert isinstance(db.query(Bucket), CustomQuery) assert db.query(Bucket).some_attr == 1
def test_reconfigure(): db = SQLAlchemy(URI1, echo=False) class Model(db.Model): id = db.Column(db.Integer, primary_key=True) db.create_all() db.add(Model()) db.commit() class CustomQuery(BaseQuery): some_attr = 1 db.reconfigure(query_cls=CustomQuery) assert isinstance(db.query(Model), CustomQuery) assert db.query(Model).some_attr == 1
def test_aggregated_query(): db = SQLAlchemy(URI1) class Unit(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60)) price = db.Column(db.Integer) db.create_all() db.add(Unit(price=25)) db.add(Unit(price=5)) db.add(Unit(price=10)) db.add(Unit(price=3)) db.commit() res = db.query(db.func.sum(Unit.price).label('price')).first() assert res.price == 43
def test_multiple_databases(): db1 = SQLAlchemy(URI1) db2 = SQLAlchemy(URI2) ToDo1 = create_test_model(db1) ToDo2 = create_test_model(db2) db1.create_all() db2.create_all() db1.add(ToDo1('A', 'a')) db1.add(ToDo1('B', 'b')) db2.add(ToDo2('Q', 'q')) db1.add(ToDo1('C', 'c')) db1.commit() db2.commit() assert db1.query(ToDo1).count() == 3 assert db2.query(ToDo2).count() == 1
def test_multiple_databases(uri1, uri2): db1 = SQLAlchemy(uri1) db2 = SQLAlchemy(uri2) ToDo1 = create_test_model(db1) ToDo2 = create_test_model(db2) db1.create_all() db2.create_all() db1.add(ToDo1("A", "a")) db1.add(ToDo1("B", "b")) db2.add(ToDo2("Q", "q")) db1.add(ToDo1("C", "c")) db1.commit() db2.commit() assert db1.query(ToDo1).count() == 3 assert db2.query(ToDo2).count() == 1
def create_test_model(): db = SQLAlchemy('sqlite://') class Item(db.Model): id = db.Column(db.Integer, primary_key=True) class Part(db.Model): id = db.Column(db.Integer, primary_key=True) item_id = db.Column(db.Integer, db.ForeignKey(Item.id)) item = db.relationship('Item', backref='parts') db.create_all() for _i in range(1, 26): item = Item() db.add(item) db.commit() item = db.query(Item).first() for _j in range(1, 26): db.add(Part(item=item)) db.commit() return db, Item, Part
app = Flask(__name__) # the replace method is needed due to this issue: https://help.heroku.com/ZKNTJQSK/why-is-sqlalchemy-1-4-x-not-connecting-to-heroku-postgres db_url = os.getenv("DATABASE_URL", "sqlite:///db.sqlite").replace("postgres://", "postgresql://", 1) db = SQLAlchemy(db_url) class Message(db.Model): id = db.Column(db.Integer, primary_key=True) author = db.Column(db.String, unique=False) text = db.Column(db.String, unique=False) db.create_all() @app.route("/", methods=["GET"]) def index(): page = request.args.get("page") if not page: page = 1 messages_query = db.query(Message) messages = paginate(query=messages_query, page=int(page), page_size=5) return render_template("index.html", messages=messages)
from sqla_wrapper import SQLAlchemy db = SQLAlchemy("sqlite:///localhost.sqlite") class Message(db.Model): id = db.Column(db.Integer, primary_key=True) text = db.Column(db.String) username = db.Column(db.String) db.create_all() # this creates the tables (unless it's already created). It does not override any table already created. # message = Message(text="Hello world! :)") # db.add(message) # db.commit() message_2 = Message(text="Hey hey hey!", username="******") db.add(message_2) db.commit() messages = db.query(Message).all() for row in messages: print(row.text) message_first = db.query(Message).first() print(message_first.text)