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

时间:2012-11-06 04:19:41

标签: 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  

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

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

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

非常感谢提前。

1 个答案:

答案 0 :(得分:5)

我不会直接回答你的问题,但我会给你一个很好的替代你现有的方法。

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

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

# ...

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

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

初始化数据库同样简单:

$ python -c "from your_app import db; db.create_all()"

使用数据库更简单:

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

db.session.add(entry)
db.session.commit()

只是一个建议。