我有一个用SQLAlchemy和SQLite构建的站点,需要切换到MySQL。我迁移了数据库本身并让它在MySQL下运行,但是
SQLALCHEMY_DATABASE_URI应该是什么)我怀疑(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 '<User %r>' % self.username
admin = User('admin', 'admin@example.com')
db.session.add(admin)
User.query.all()
User.query.filter_by(username='admin').first()除了对数据库URI进行适当的更改外,wold不进行任何修改;但是,使用我找到的例子与MySQL一起使用SQLAlchemy的API似乎使用了完全不同的API。
我能否(2)通过简单地更改数据库URI来迁移我的SQLAlchemy代码以处理MySQL数据库,如果是的话(1)这个URI应该是什么?
发布于 2015-02-08 06:51:00
您所指出的教程展示了使用MySQL连接到SQLAlchemy的正确方法。下面是更改非常少的代码:
我的假设是,您的MySQL服务器正在运行的同一台机器上运行,数据库名为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 '<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)使用的默认驱动程序在我的虚拟环境中并没有被编译。因此,我选择了一个具有完整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映射到上面的代码中。
发布于 2019-04-20 15:43:30
当时接受的答案是正确的,但导入语句中的语法已被废弃。
这是:
from flask.ext.sqlalchemy import SQLAlchemy应改为:
import flask_sqlalchemy由于有关数据库连接的问题往往会获得通信量并在很长一段时间内保持相关性,因此值得记录在案。
反对意见出现在瓶装1.0版变更版中,它在示例中实际使用了该模块:
flask.ext -通过名称直接导入扩展,而不是通过flask.ext命名空间导入扩展。例如,导入flask.ext.sqlalchemy变成导入flask_sqlalchemy。
https://stackoverflow.com/questions/27766794
复制相似问题