当前位置: 首页 > 面试题库 >

使用Flask SQLAlchemy从SQLite切换到MySQL

解浩渺
2023-03-14
问题内容

我有一个使用Flask SQLAlchemy和SQLite构建的网站,并且需要切换到MySQL。我已经迁移了数据库本身,并使其在MySQL下运行,但是

  1. 无法弄清楚如何连接到MySQL数据库(即SQLALCHEMY_DATABASE_URI应该是什么),并且
  2. 目前尚不清楚我现有的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 '<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进行适当的更改外,无需进行任何修改即可进行工作;但是我发现将SQLAlchemy与MySQL结合使用的示例似乎使用了完全不同的API。

我是否可以(2)通过简单地更改数据库URI来迁移我的Flask SQLAlchemy代码以与MySQL数据库一起使用,如果可以的话(1)该URI应该是什么?


问题答案:

您所指向的教程显示了使用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 '<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()

我偶然发现SQLAlchemymqsqldb)使用的默认驱动程序在我的虚拟环境中没有为我编译。因此,我选择了具有完整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一起使用。



 类似资料:
  • 我有一个Java 7项目,它大量使用Javascript编写各种功能的脚本。到目前为止,我一直使用Rhino作为脚本引擎。我现在想转到Java 8,这也意味着我将用Nashorn取代Rhino。 Nashorn与Rhino的兼容性如何?我可以将其用作直接替换,还是我可以预期我的一些脚本将不再工作,需要移植到新引擎?Rhino是否有Nashorn不支持的常用功能?

  • 我目前正在开发一款只使用2D图形的游戏。 在游戏中,我广泛使用android的来显示我的图形。我听说,使用硬件加速图形,我可以使用它来提高我的应用程序的性能,而不是使用当前的。 目前,我有一个扩展的类,当我自己的线程类扩展调用和方法时,它会更新和渲染游戏状态。线程基本上帮助我保持几乎恒定的FPS。 现在的问题是:我如何从更改为,并调用方法从线程更新和渲染游戏状态,以仍然控制FPS。我阅读了Open

  • Java(TM)SE运行时环境(构建1.8.0_102-B14) Java HotSpot(TM)64位服务器VM(构建25.102-B14,混合模式) 我知道jdk11不包含jre,但是我如何在java 11中从cmd运行java程序呢

  • Nerv 提供了比 React 更好的浏览器兼容性和更高的性能,与此同时也不会放弃 React 庞大的生态系统。兼容 React 生态系统是我们开发 Nerv 的重要目标之一。 假设我们有这样一段代码: var React = require('react'); var ReactDOM = require('react-dom'); class MyComponent extends Reac

  • 你好,我想导入我的android studio项目到Netbeas,但我得到这个错误与Gradle。

  • 问题内容: 我正在创建一个Android应用程序,并通过HttpClient将数据从Android应用程序发送到servlet。我使用HttpPost方法。 我在Android开发人员网站上了解到,Apache HttpClient库在Android Froyo 2.2中存在一些错误,毕竟使用HttpUrlConnection而不是HttpPost是一个好习惯。所以我想将我的HttpPost代码转