Mysql
 sql >> Database >  >> RDS >> Mysql

Passaggio da SQLite a MySQL con Flask SQLAlchemy

Il tutorial da te indicato mostra il modo corretto di connettersi a MySQL utilizzando SQLAlchemy. Di seguito è riportato il tuo codice con pochissime modifiche:

Le mie ipotesi sono che il tuo server MySQL è in esecuzione sulla stessa macchina su cui è in esecuzione Flask e il nome del database è db_name. Nel caso in cui il tuo server non sia la stessa macchina, metti l'IP del server al posto di localhost .

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:[email protected]/db_name'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

admin = User('admin', '[email protected]')

db.create_all() # In case user table doesn't exists already. Else remove it.    

db.session.add(admin)

db.session.commit() # This is needed to write the changes to database

User.query.all()

User.query.filter_by(username='admin').first()

Mi è successo che il driver predefinito utilizzato da SQLAlchemy (mqsqldb ), non viene compilato per me nei miei ambienti virtuali. Quindi ho optato per un driver MySQL con implementazione completa di Python pymysql . Dopo averlo installato usando pip install pymysql , SQLALCHEMY_DATABASE_URI cambierà in:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:[email protected]/db_name'

Lo scopo dell'utilizzo di ORM come SQLAlchemy è che nella maggior parte dei casi è possibile utilizzare database diversi con modifiche minime o nulle. Quindi, la mia risposta è sì. Dovresti essere in grado di utilizzare il tuo codice sqlite per lavorare con MySQL con l'URI mappato come nel codice sopra.