我需要对Flask python应用程序使用MySQL数据库进行哪些更改?

zch*_*zch 4 python mysql sqlite flask

我是开发应用程序的新手,我一直在尝试熟悉使用Flask这样做.我按照他们的精彩教程阅读了他们同样详细的文档,以创建我的第一个使用SQLite3数据库的基本应用程序.

为了实现这一点,并按照他们的指示,我导入了以下内容:

from __future__ import with_statement
from contextlib import closing   

import sqlite3
from flask import Flask, request, session, g, redirect, url_for, \
     abort, render_template, flash  
Run Code Online (Sandbox Code Playgroud)

schema.sql使用以下内容设置文件以配置数据库:

drop table if exists entries;
create table entries (
  id integer primary key autoincrement,
  title string not null,
  text string not null
);
Run Code Online (Sandbox Code Playgroud)

我使用再次来自Flask站点教程的命令访问数据库.我认为,在创建用户创建和管理自己的帐户的应用程序时,我需要实现MySQL数据库.在这种情况下,我需要更改与数据库相关的代码有哪些类似的东西?我确信使用这两个数据库之间存在很大的差异,因此任何参考点 - 建议或遵循的文档 - 将不胜感激.

提前谢谢了.

Ble*_*der 5

我不打算直接回答你的问题,但我会给你一个很好的替代你当前的方法.

而不是使用SQL操作数据库,为什么不采用SQLAlchemy的OOP方法?

这是您当前代码的粗略翻译:

# ...

from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__.split('.')[0])

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///path/database.db'
#app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:pass@localhost/database'

db = SQLAlchemy(app)

class Entry(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.Text)
    text = db.Column(db.Text)

    def __init__(self, title, text):
        self.title = title
        self.text = text

    def uppercase(self):
        self.title = self.title.upper()
        self.text = self.text.upper()
Run Code Online (Sandbox Code Playgroud)

请注意数据结构如何不依赖于数据库.只需更改一个配置字符串,即可从SQLite切换到MySQL.

初始化数据库同样简单:

$ python -c "from your_app import db; db.create_all()"
Run Code Online (Sandbox Code Playgroud)

使用数据库更简单:

entry = Entry('test', 'entry')
entry.uppercase()

db.session.add(entry)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)

只是一个建议.