1
votes

I am going to build a site using Flask+MySQL+Flask-SQLAlchemy, however, after reading some tutorials, I have some questions:

  • Flask-SQLAlchemy can be imported in at least two ways:

http://pythonhosted.org/Flask-SQLAlchemy/quickstart.html

from flask.ext.sqlalchemy import SQLAlchemy

OR http://flask.pocoo.org/docs/patterns/sqlalchemy/

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

The first way seems much more convenient. Why Pocoo team choose to use the second way?

I need some good examples on MySQL+Flask-SQLAlchemy, while most example are SQLite+MySQL+Flask-SQLAlchemy.

2

2 Answers

4
votes

I have been coding using MySQL+Flask-SQLAlchemy and i host my applications on pythonanywhere.com ,like what @Sean Vieira said ,your code will run on any Relational database the only thing you need to change is the connection string to the database of your liking ,e.g using Mysql ,this will be saved in a file called config.py [you can save it using any other name]

SQLALCHEMY_DATABASE_URI = 'mysql://username:password@localhost/yourdatabase'
SQLALCHEMY_POOL_RECYCLE = 280
SQLALCHEMY_POOL_SIZE = 20
SQLALCHEMY_TRACK_MODIFICATIONS = True 

then in your main app ,you will import it like this

 from flask import Flask
 from flask_sqlalchemy import SQLAlchemy

 # Create an Instance of Flask
 application = Flask(__name__)

 # Include config from config.py
 application.config.from_object('config')
 application.secret_key = 'some_secret_key'

 # Create an instance of SQLAlchemy
 db = SQLAlchemy(application)

and all you need is to make sure your models correspond to a database table like the model below

 class Isps(db.Model):
__tablename__ = "isps"
isp_id = db.Column('isp_id', db.Integer, primary_key=True)
isp_name = db.Column('isp_name', db.String(80), unique=True)
isp_description = db.Column('isp_description', db.String(180))

# services = db.relationship('Services', backref="isps", cascade="all, delete-orphan",lazy='dynamic')


def __init__(self, isp_name, isp_description):
    self.isp_name = isp_name
    self.isp_description = isp_description

def __repr__(self):
    return '<Isps %r>' % self.isp_name

and you can then learn the power of SQLAlchemy to do optimised queries

2
votes

Flask-SQLAlchemy was written by Armin (the creator of Flask) to make it simple to work with SQLAlchemy. The pattern described in Flask's documentation is what you would use if you did not choose to use the Flask-SQLAlchemy extension.

As for MySQL vs. SQLite, the whole point of the SQLAlchemy ORM is to make it possible (for the most part) to ignore what database you are running against. SomeModel.filter(SomeModel.column == 'value') will work the same, regardless of what database you are connecting to.