Flask零基础到项目实战(四)SQLAlchemy数据库(二)

文章来源—知了课堂的课件


一、SQLAlchemy模型与表映射

注意事项:
  1. 模型需要继承自db.Model,然后需要映射到表中的属性,必须写成db.Column的数据类型。
  2. 数据类型:
    • db.Integer代表的是整形.
    • db.String代表的是varchar,需要指定最长的长度。
    • db.Text代表的是text
  3. 其他参数:
    • primary_key:代表的是将这个字段设置为主键。
    • autoincrement:代表的是这个主键为自增长的。
    • nullable:代表的是这个字段是否可以为空,默认可以为空,可以将这个值设置为False,在数据库中,这个值就不能为空了。
  4. 最后需要调用db.create_all来将模型真正的创建到数据库中。

分析:
SQL语句

create table article (
     id int primary key autoincrement,
     title varchar(100) not null,
     content text not null,
)

python的ORM代码

# 首先继承自db.Model
class Article(db.Model):
    __tablename__ = 'article' # 指定一个表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)

实例:
main.py

# encoding:utf8

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)

# Article表
# create table article (
#     id int primary key autoincrement,
#     title varchar(100) not null,
#     content text not null,
# )


# 创建一个article表,ORM中一个表对应一个类
class Article(db.Model):
    __tablename__ = 'article' # 指定一个表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)

db.create_all()

@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run(debug=True)

config.py

# encoding:utf8

# dialect+driver://username:password@host:port/database

DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = ''
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'db_demo'

# 使用一种Python3的语法将连接数据的各种参数连接起来

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST
                                             , PORT, DATABASE)

SQLALCHEMY_TRACK_MODIFICATIONS = True

二、SQLAlchemy数据表增删改查

1.增
    # 增加:
    article1 = Article(title='aaa',content='bbb')
    db.session.add(article1)
    # 事务
    db.session.commit()
2.查
  • 查出来的是Query类型的数据,相当于list类型的数据。

方式一:

    # 查
    # select * from article where article.title='aaa';
    article1 = Article.query.filter(Article.title == 'aaa').first() # 包装成Article这样的一个对象,操作时就可以像操作类的对象一样
    print 'title:%s' % article1.title
    print 'content:%s' % article1.content

方式二:

result = Article.query.filter(Article.title == 'aaa')
print result   # 打印的是执行的SQL语句

方式三:

result = Article.query.filter(Article.title == 'aaa').all() # 返回的是一个数组
print result[0]   # 打印的是返回的数组的一个元素
article1 = result[0] 
print article1.title
print article1.content
3.改
    # 改:
    # 1. 先把你要更改的数据查找出来
    article1 = Article.query.filter(Article.title == 'aaa').first()
    # 2. 把这条数据,你需要修改的地方进行修改
    article1.title = 'new title'
    # 3. 做事务的提交
    db.session.commit()
4.删
    # 删
    # 1. 把需要删除的数据查找出来
    article1 = Article.query.filter(Article.content == 'bbb').first()
    # 2. 把这条数据删除掉
    db.session.delete(article1)
    # 3. 做事务提交
    db.session.commit()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值