Flask SQL Chemy를 사용하여 SQLite에서 MySQL로 전환
Flask SQLchemy와 SQLite로 구축한 사이트가 있어 MySQL로 전환해야 합니다.데이터베이스 자체를 이행하여 MySQL에서 실행 중이지만
- MySQL 데이터베이스에 연결하는 방법(즉,
SQLALCHEMY_DATABASE_URI
필요) 및 - 기존 SQL Chemy SQLite 코드가 MySQL에서 동작하는지 불분명합니다.
(1)은 매우 단순하고 예를 들어 MySQL 데이터베이스 툴에서 사용하는 연결 대화상자의 내용을 적절한 형식의 URL에 매핑하는 방법을 보여주는 것이라고 생각합니다.그러나 (2) SQL Chemy가 다음과 같은 간단한 SQL Chemy 코드와 같은 추상화 레이어를 제공했다고 가정했습니다.
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의 적절한 변경 이외에는 동작하지 않습니다만, MySQL에서 SQL Chemy를 사용한 예에서는 전혀 다른 API를 사용하고 있는 것 같습니다.
데이터베이스 URI를 변경하는 것만으로 Flask SQL Chemy 코드를 MySQL 데이터베이스와 연동하도록 이행할 수 있습니까?그 경우 URI는 어떻게 해야 합니까?
귀하가 지적한 튜토리얼은 SQL Chemy를 사용하여 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()
이 기본 드라이버는 다음과 같이 사용됩니다.SQLAlchemy
(mqsqldb
가상 환경에서는 컴파일되지 않습니다.그래서 파이썬을 완전히 구현한 MySQL 드라이버를 선택했습니다.pymysql
를 사용하여 설치했을 때pip install pymysql
SQLALCHEMY_DATABASE_URI는 다음과 같이 변경됩니다.
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/db_name'
SQL Chemy와 같은 ORM을 사용하는 목적은 대부분의 경우 변경 없이 다른 데이터베이스를 사용할 수 있다는 것입니다.그래서 제 대답은 '그렇다'입니다.sqlite 코드를 사용하여 위 코드와 같이 매핑된 URI를 사용하여 MySQL에서 작업할 수 있습니다.
현재 승인된 답변은 맞지만 Import문의 구문은 사용되지 않습니다.
이것은, 다음과 같습니다.
from flask.ext.sqlalchemy import SQLAlchemy
대체 순서:
import flask_sqlalchemy
데이터베이스 접속에 관한 질문은 트래픽을 수신하여 장기간 관련성을 유지하는 경향이 있으므로 기록해 둘 필요가 있습니다.
이 권장사항은 플라스크 버전 1.0 Changelog에 기재되어 있습니다.이 예에서는 실제로 이 모듈을 사용하고 있습니다.
flask.ext - 확장자를 flask.ext 네임스페이스가 아닌 이름으로 직접 가져옵니다.예를 들어 import flask.ext.sqlalchemy는 import flask_sqlalchemy가 됩니다.
언급URL : https://stackoverflow.com/questions/27766794/switching-from-sqlite-to-mysql-with-flask-sqlalchemy
'programing' 카테고리의 다른 글
UI-Router가 Angular에 있는 기본 서브스테이트로 상태 리다이렉트JS (0) | 2023.03.18 |
---|---|
memcpy() 및 memmove()가 포인터의 증가보다 빠른 이유는 무엇입니까? (0) | 2023.02.04 |
macports 업데이트 후 mariadb가 포트 3306에서 수신을 하지 않는 이유는 무엇입니까? (0) | 2023.02.04 |
PHP 7: VCRUNTIME 140.dll이 없습니다. (0) | 2023.02.04 |
View에서 휴지 상태 열기 세션이 잘못된 관행으로 간주되는 이유는 무엇입니까? (0) | 2023.02.04 |