且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用Flask SQLAlchemy从SQLite切换到MySQL

更新时间:2023-08-20 07:52:58

您指向的教程显示了使用SQLAlchemy连接MySQL的正确方法。下面是你的代码,只有很少的改动:

The tutorial pointed by you shows the right way of connecting to MySQL using SQLAlchemy. Below is your code with very little changes:

我的假设是你的MySQL服务器运行在同一台机器上,Flask正在运行,数据库名是db_name。如果您的服务器不是同一台计算机,请将服务器IP替换为 localhost

My assumptions are your MySQL server is running on the same machine where Flask is running and the database name is db_name. In case your server is not same machine, put the server IP in place of localhost.

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/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', 'admin@example.com')

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()

我发现 SQLAlchemy mqsqldb )使用的默认驱动程序,不会在我的虚拟环境中为我编译。所以我选择了一个MySQL驱动程序完全python实现 pymysql 。使用 pip install pymysql 安装它后,SQLALCHEMY_DATABASE_URI将更改为:

It happened to me that the default driver used by SQLAlchemy (mqsqldb), doesn't get compiled for me in my virtual environments. So I have opted for a MySQL driver with full python implementation pymysql. Once you install it using pip install pymysql, the SQLALCHEMY_DATABASE_URI will change to:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/db_name'

使用ORM像SQLAlchemy的目的是,你可以使用不同的数据库,在大多数情况下很少或没有变化。所以,我的答案是肯定的。您应该能够使用您的sqlite代码与MySQL一起使用URI映射为上面的代码。

The purpose of using ORM like SQLAlchemy is that , you can use different database with little or no change in most cases. So, my answer is yes. You should be able to use your sqlite code to work with MySQL with the URI mapped as in above code.