作者:jack2502937407 | 来源:互联网 | 2023-05-28 14:30
我有一个我用Flask SQLAlchemy和SQLite构建的网站,需要切换到MySQL.我已经迁移了数据库并让它在MySQL下运行,但是
无法弄清楚如何连接到MySQL数据库(即SQLALCHEMY_DATABASE_URI
应该是什么)和
我不清楚我现有的任何SQLAlchemy SQLite代码是否适用于MySQL.
我怀疑(1)是相当简单的,只是显示如何映射,例如,我在我的MySQL数据库工具中使用的连接对话框的内容到适当格式化的URL.但我担心(2),我曾假设SQLAlchemy提供了一个抽象层,以便简单的SQLAlchemy代码如
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
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 '' % self.username
admin = User('admin', 'admin@example.com')
db.session.add(admin)
User.query.all()
User.query.filter_by(username='admin').first()
除了对数据库URI的适当更改之外,没有任何修改的工作; 但我发现使用SQLAlchemy和MySQL 的例子似乎使用了完全不同的API.
我是否可以(2)通过简单地更改数据库URI来迁移我的Flask SQLAlchemy代码以使用MySQL数据库,如果是这样(1)该URI应该是什么?
1> skjoshi..:
您指出的教程显示了使用SQLAlchemy连接MySQL的正确方法.以下是您的代码,只有很少的变化:
我的假设是你的MySQL服务器在运行Flask的同一台机器上运行,数据库名称是db_name.如果您的服务器不是同一台机器,请将服务器IP置于其中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 '' % 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
)使用的默认驱动程序在我的虚拟环境中不会为我编译.所以我选择了一个带有完整python实现的MySQL驱动程序pymysql
.使用后安装它pip install pymysql
,SQLALCHEMY_DATABASE_URI将更改为:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/db_name'
像SQLAlchemy这样使用ORM的目的是,在大多数情况下,您可以使用不同的数据库,几乎不做任何更改.所以,我的回答是肯定的.你应该能够使用你的sqlite代码来处理MySQL,并使用上面代码中映射的URI.