flask-sqlalchemy(1)
来源:互联网 发布:手机后花园软件 编辑:程序博客网 时间:2024/06/05 04:32
记录flask-sqlalchemy的坑。
1.测试是否成功创建多对多关系。
多对多关系三个关系表:
三个表:由两个一对多关系,SQLAlchemy 可以完成大部分两个一对多的查询操作。tagpostmap 表由SQLAlchemy自动处理,不是模型。
tagpostmap = db.Table(‘tagpostmap’,
db.Column(‘tag_id’, db.Integer, db.ForeignKey(‘tags.id’)),
db.Column(‘post_id’, db.Integer, db.ForeignKey(‘posts.id’))
)
class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) b_title = db.Column(db.Text) body_html = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) tags = db.relationship('Tag', secondary=tagpostmap, backref=db.backref('posts', lazy='dynamic'), lazy='dynamic')
class Tag(db.Model): __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Text) count = db.Column(db.Integer,default=0)
代码为添加标签到数据库中并把tags记录到post里,形成多对多关系。
for taglist in nametest.split(';') : print taglist if taglist : tag = Tag.query.filter_by(name=taglist).first() #tagname=taglist if not tag : tag = Tag(name=taglist, count=1 ) else: tag.count=tag.count+1 #db.session.add(tag) db.session.add(tag) post.tags.append(tag)#把标签加入文章里 db.session.add(post) db.session.commit()
开始测试
创建文章,标签
>>> s = Post(body="#4",b_title="4",body_html="444")>>> c = Tag(name="abcd",count=1)>>> s.tags.append(c)>>> db.session.add(s)>>> c1 = Tag(name="defg",count=1)
>>>post.tags.all()
返回的一直显示这样:
[<app.models.Tag object at 0xb635878c>, <app.models.Tag object at 0xb627a48c>]
并没有显示正常的字符串数值。
通过在shell里新建一个测试数据对比发现这可能是一Model。
再加上属性name
>>> s.tags.all().nameTraceback (most recent call last): File "<console>", line 1, in <module>AttributeError: 'list' object has no attribute 'name'
出错,提示list也就是列表没有这个name属性。也就是说它返回的是一个列表。查看最常使用的SQLAlchemy查询执行函数
all()以列表形式返回查询的所有结果
first() 返回查询的第一个结果,如果没有结果,则返回None
再测试:加上first()试试
>>> s.tags.first().nameu'abcd'
正确显示!
说明列表不可以,单个可以,再用for in 迭代:
>>> for u in s.tags.order_by(Tag.id).all().name :... print u... Traceback (most recent call last): File "<console>", line 1, in <module>AttributeError: 'list' object has no attribute 'name'
忘了属性问题,而且迭代用错了
继续:
>>> for u in s.tags.order_by(Tag.id).all() :... print u.name... abcdefgh
这样就对了!
总之就是flask-sqlalchemy查询返回的格式问题,虽然普通表和创建的模型处理不同,但是返回的格式是一样的
1 0
- flask-sqlalchemy(1)
- flask sqlalchemy(二)
- flask-SQLAlchemy错误(一)
- 【Flask】Flask和SQLAlchemy:init_app
- Flask-SQLAlchemy 学习
- Flask-SQLALchemy学习笔记
- Flask-SQLAlchemy管理数据库
- Flask sqlalchemy操作数据库
- flask-sqlalchemy实例
- Flask-SQLAlchemy 快速入门
- flask-sqlalchemy 简单笔记
- flask-sqlalchemy 实例代码
- 4.Flask-SQLAlchemy
- flask sqlalchemy(一)
- Flask-SQLAlchemy使用方式
- flask SQLAlchemy 数据库操作
- Flask-SQLAlchemy 学习总结
- flask 与SQLAlchemy
- 【JAVA开发之IO流1-3】IO流之缓冲流
- 用迪杰斯特拉算法求赋权图中的最短路径
- mipi调试经验
- Spring_Q_collect
- 1.Java IO教程
- flask-sqlalchemy(1)
- 一种文库类网站建设思路.md
- leetcode 133. Clone Graph
- 大数相乘,结果在2000位以内
- Java 输出流中的flush方法
- ORACLE多表关联UPDATE 语句
- 《樱桃树下的对白------我孤身在外》
- 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
- 深度优先搜索/广度优先搜索顶点之间的路径(邻接表)