码迷,mamicode.com
首页 > 数据库 > 详细

flask笔记:5:数据库

时间:2016-05-12 14:02:42      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

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='john@email.com')
add_com(u)
w=models.User(nickname='susan', email='susan@email.com')
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
john@email.com
[<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( )删除


技术分享
技术分享

flask笔记:5:数据库

标签:

原文地址:http://blog.csdn.net/u013055678/article/details/51365862

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!