2015-01-04 2 views
22

플라스크 SQLAlchemy 및 SQLite로 구축 한 사이트가 있으며 MySQL로 전환해야합니다. 나는 자체 데이터베이스를 마이그레이션 한 그것은 MySQL의에서 실행,하지만플라스크 SQLite에서 MySQL로 전환 SQLAlchemy

  1. MySQL 데이터베이스에 연결하는 방법을 알아낼 수 없습니다 (즉, SQLALCHEMY_DATABASE_URI는해야한다 무엇을) 어떤 경우
  2. 암 불분명 내 기존 SQLAlchemy SQLite 코드는 MySQL에서 작동합니다.

(1)은 (1) 상당히 간단하고 예를 들어 MySQL 데이터베이스 도구에서 적절하게 형식화 된 URL로 사용하는 연결 대화 상자의 내용을 매핑하는 방법을 보여 주어야한다고 생각합니다. (2) 내가 SQLAlchemy의이 추상화 계층을 제공하는 것으로 가정했다 대해 그러나 나는 걱정 그래서 데이터베이스 URI에 대한 적절한 변화 이외의 수정없이 simple SQLAlchemy code such as

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', '[email protected]') 

db.session.add(admin) 

User.query.all() 

User.query.filter_by(username='admin').first() 

고원 작업; 그러나 MySQL에서 SQLAlchemy를 사용하기위한 examples I've found은 완전히 다른 API를 사용하는 것 같습니다.

단순히 데이터베이스 URI를 변경하여 MySQL 데이터베이스에서 작동하도록 Flask SQLAlchemy 코드를 마이 그 레이션 할 수 있습니까? 그렇다면 (1) 그 URI는 무엇이되어야합니까?

+1

예, orm의 요점은 차이점을 추상화하여 다른 이유가 무엇인지 생각하지 못하는 것입니다. 그리고 분명히 당신이 연결하는 블로그는 uri가 무엇이어야하는지에 대한 완벽한 예를 가지고 있습니까? –

+0

@DanielRoseman : 예를 들어,'create_engine'의 사용은 제가 본 것이 아닙니다. – orome

+0

그러나 이것은 데이터베이스 간의 차이점과는 아무런 관련이 없으며 Flask가 db 구성을 설정하는 방법과 독립 실행 형 방법을 비교하는 방법입니다. –

답변

42

이 가이드는 SQLAlchemy를 사용하여 MySQL에 연결하는 올바른 방법을 보여줍니다. 아래 코드는 약간 변경되었습니다 :

제 생각에는 MySQL 서버가 Flask가 실행되고 데이터베이스 이름이 db_name 인 동일한 시스템에서 실행되고 있습니다. 서버가 동일한 시스템이 아닌 경우 localhost 대신 서버 IP를 입력하십시오.

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:[email protected]/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', '[email protected]') 

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)에서 사용하는 기본 드라이버가 내 가상 환경에서 나를 위해 컴파일되지 않습니다 나에게 일어났다. 그래서 전체 파이썬 구현 pymysql으로 MySQL 드라이버를 선택했습니다.

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:[email protected]/db_name' 

SQLAlchemy의 같은 ORM을 사용하는 목적은 당신이 대부분의 경우 거의 변화없이 다른 데이터베이스를 사용할 수 있다는 것입니다 : 당신이 pip install pymysql를 사용하여 설치하면, SQLALCHEMY_DATABASE_URI이 변경됩니다. 그래서, 제 대답은 '예'입니다. 위 코드 에서처럼 매핑 된 URI를 사용하여 MySQL과 작업 할 때 sqlite 코드를 사용할 수 있어야합니다.

관련 문제