flask笔记:5:数据库

linux和mac下需要将项目文件夹赋予权限,不然不能执行

flask中使用Flask-SQLAlchemy扩展来管理程序数据。

修改配置文件 myblog/config.py

CSRF_ENABLED=True
SECRET_KEY='you-will-never-guess'
import os
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
SQLALCHEMY_TRACK_MODIFICATIONS=True
#db文件创建在与创建脚本同一目录下
# SQLALCHEMY_DATABASE_URI是the Flask-SQLAlchemy必需的扩展。这是我们的数据库文件的路径。
# SQLALCHEMY_MIGRATE_REPO 是用来存储SQLAlchemy-migrate数据库文件的文件夹。
#SQLALCHEMY_TRACK_MODIFICATIONS 不设为True会报错(貌似段代码没有也能正常运行)

修改初始化脚本 app/__init__.py

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app=Flask(__name__)
app.config.from_object('config')
db=SQLAlchemy(app)
from app import views,models
#导入Flask-SQLAlchemy
#创建了一个 db 对象,这是我们的数据库
#导入一个新的模块,叫做 models

编写models模块 app/models.py

from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    posts = db.relationship('Post', backref='author', lazy='dynamic')

    def __repr__(self):
        return '<User %r>' % (self.nickname)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Post %r>' % (self.body)

表关系:

#数据模型类要继承db.Model

db.Column( )是创建一列

db.Integer 是整数类型

db.String 是字符串类型

primary_key = True 是主键

index=True 增加索引

unique=True 整表唯一

db.relationship( ),第一个参数是类名,第二个backref名字好像是随便(这个参数是在新增数据时user_id 用 authou 代替 ),第三个固定lazy=‘dynamic‘

db.relationship( )定义主键和外键的联系

db.ForeignKey( )是外键

__repr__方法告诉Python如何打印class对象,方便我们调试使用。

创建数据库 mybolg/db_cj.py

from app import db
db.create_all()
#create_all( )是创建数据库

执行这个脚本就会创建数据库

测试新增用户 xz_user.py

from app import db, models

def add_com (u):
    db.session.add(u)
    db.session.commit()

u = models.User(nickname='john', email='[email protected]')
add_com(u)
w=models.User(nickname='susan', email='[email protected]')
add_com(w)
#session.add( )添加数据
#session.commit( )提交事务

测试新增文章 xz_body.py

import datetime
from app import db, models

u = models.User.query.get(1)
p = models.Post(body='my first post!', timestamp=datetime.datetime.utcnow(), author=u)
db.session.add(p)
db.session.commit()
#authou就是Post数据类里的user_id(应该是的)

测试查询用户 cx_user.py

from app import db, models
users = models.User.query.all()
print users
for u in users :
    print u.id,u.nickname
e=models.User.query.get(1)
print e
p=models.User.query.filter_by(nickname="john").first()
print p.id
print p.email
d=models.User.query.filter(models.User.email.endswith('@email.com')).all()
print d

结果:

[<User u‘john‘>, <User u‘susan‘>]

1 john

2 susan

<User u‘john‘>

1

[email protected]

[<User u‘john‘>, <User u‘susan‘>]

#query这个属性是查询,query.all( )是查询所有

#query.get( )是查询主键

#filter_by( )是单条过滤条件,first( )是选择第一条

#query.filter_by(过滤条件).first( )根据过滤条件查询第一条

#filter( )多条过滤条件

测试查询文章 cx_body.py

from app import db, models
u = models.User.query.get(1)
print u
posts = u.posts.all()
print posts
e=models.User.query.get(2)
print e.posts.all()

结果:

<User u‘john‘>

[<Post u‘my first post!‘>]

[  ]

测试清空数据库 db_qk.py

from app import db, models
users = models.User.query.all()
for u in users:
    db.session.delete(u)
posts = models.Post.query.all()
for p in posts:
    db.session.delete(p)
db.session.commit()
#session.delete( )删除

时间: 2024-10-12 08:27:11

flask笔记:5:数据库的相关文章

Flask系列:数据库

这个系列是学习<Flask Web开发:基于Python的Web应用开发实战>的部分笔记 对于用户提交的信息,包括 账号.文章 等,需要能够将这些数据保存下来 持久存储的三种方法: 文件:shelve(pickle 和 DBM 的结合)等,提供类似字典的对象接口 关系型数据库(SQL) 非关系型数据库(NoSQL) 其他 通常会使用数据库保存信息,并向数据库发起查询获取信息 SQL,关系型数据库 关系型数据库把数据存储在表中,表在程序中通过 Python 的类实现.例如,订单管理程序的数据库中

Django开发笔记之数据库的设计

后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原型的时候就开始开发的困难之处,每次需求更改就会带来后台的数据和对应接口的一次变更.费时费精力 2.有了需求,那么开始数据库的设计,在Django中,并不需要直接去操作数据库,而且使用继承modesl.Model的类,在类中定义自己的模型,然后使用Python manage.py syncdb就可看到

Flask学习之三 数据库

英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database 中文翻译地址:http://www.pythondoc.com/flask-mega-tutorial/database.html 开源中国社区:www.oschina.net/translate/the-flask-mega-tutorial-part-iv-database 一.Flask中的数据库 教程:将使用 Flask-

mysql笔记1_数据库发展史

数据库发展史 萌芽阶段--文件系统 初级阶段--第一代数据库:网状模型.层次模型的数据库. 中级阶段--第二代数据库:关系型数据库和结构化查询语句. 高级阶段--第三代数据库:“关系-对象”型数据库. 数据库管理系统(DBMS) SQL(Strutured Query Language)结构化查询语言 DDL(Data Definition Language)数据定义语言 DML(Data Management Language)数据操作语言.mysql自动提交(auto commit),Ora

mysql笔记8_数据库设计步骤

step1: 收集信息,与谈系统有关的人员进行交流.座谈,充分了解数据库需要完成的任务. 示例:blog系统 基本功能:发表和编辑文章,多用户支持,全文检索,RSS支持,图片收藏,管理站内短消息. step2: 标识对象(实体Entity) 标识数据库要管理的关键对象或实体. 实体一般是名词: 博主账号:发表和管理文章.图片管理. 文章类别 文章 文章回复 图片分类 图片 连接分类 连接 短消息 step3: 标识每个实体的属性 E-R图(Entity-Relationship) |     符

Symfony2学习笔记之数据库操作

数据库和Doctrine让我们来面对这个对于任何应用程序来说最为普遍最具挑战性的任务,从数据库中读取和持久化数据信息.幸运的是,Symfony和Doctrine进行了集成,Doctrine类库全部目标就是给你一个强大的工具,让你的工作更加容易. Doctrine是完全解耦与Symfony的,所以并不一定要使用它. 一个简单例子:一个产品,我们首先来配置数据库,创建一个Product对象,持久化它到数据库并把它读回来. 首先我们需要创建一个bundle: $php app/console gene

flask学习笔记(-操作数据库)

Python 数据库框架 大多数的数据库引擎都有对应的 Python 包,包括开源包和商业包.Flask 并不限制你使用何种类型的数据库包,因此可以根据自己的喜好选择使用 MySQL.Postgres.SQLite.Redis.MongoDB 或者 CouchDB. 如果这些都无法满足需求,还有一些数据库抽象层代码包供选择,例如SQLAlchemy和MongoEngine.你可以使用这些抽象包直接处理高等级的 python 对象,而不用处理如表.文档或查询语言此类的数据库实体. 选择数据库框架的

flask笔记二

web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLED = True SECRET_KEY = 'you-will-never-guess' CSRF_ENABLED配置跨站点保护,就是防止程序挟持用户执行非本意的操作,是一种web的攻击行为,这个设置会提高web的安全性. SECRET_KEY是当CSRE(跨站请求伪造)激活时执行,实现加密用来验证

Django 学习笔记之三 数据库输入数据

假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介绍往数据库中添加数据,django默认的是sqlite3数据库. 在建立完django_blog项目后,不要忘了把 blog 加入到 settings.py 中的 INSTALLED_APPS 中. 一.同步数据库,创建相应的表 具体的参照Django 学习笔记之二的的同步数据库. 二.数据输入 下