ORM模型
对象关系映射(object relationship mapping,简称ORM),是一种可以用Python面向对象的方式来操作关系型数据库的技术,具有可以映射到数据库表能力的Python类,我们称之为ORM模型,一个ORM模型与数据库中一个表相对应,ORM模型中的每个类属性分别对应表的每个字段,ORM模型的每个实例对应表中的每天记录,ORM技术提供了面向对象与SQL交互的桥梁,让开发者用面向对象的方式操作数据库,使用ORM模型有以下优势:
- 开发效率高
- 安全性高
- 灵活性高
下面用Flask-SQLAlchemy来创建一个User模型,示例代码如下(片段):
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(100),nullable=False)
password = db.Column(db.String(100),nullable=False)
db.create_all()
以上代码,首先创建了一个User类,并使他继承自db.Model类,所有ORM模型必须是db.Model的直接或者间接子类,然后通过__tablename__属性,指定User模型映射到数据库中表的名称,接着定义了3个db.Column类型的类属性,分别是id、username、password,只有使用db.Column定义的类属性,才会被映射到数据库表中成为字段,最后通过db.create_all()把User模型映射成数据库中的表。
ORM与表的映射整体代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
app = Flask(__name__)
#然后还需要再app.config中设置SQLALCHMEY_DATABASE_URI,来配置数据库的连接
#mysql所在的主机名
HOSTNAME = "127.0.0.1"
#MYSQL监听的端口号,默认3306
PORT = 3306
#连接MYSQL的用户名,用户用自己设置的
USERNAME = 'root'
#连接mysql的密码,用户自己设置的
PASSWORD = 'root123456'
#mysql上创建的数据库名称
DATABASE = 'database_learn'
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
# 创建一个有Flask-SQLAlchemy提供的SQLAlchemy类的对象db,在创建这个类时,要传入当前的app
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(100),nullable=False)
password = db.Column(db.String(100),nullable=False)
with app.app_context():
db.create_all()
@app.route("/")
def hello_world():
return "hello world"
if __name__ == "__main__":
app.run()