分类 "SQLAlchemy" 下的文章

问题:由于用户多次点击按钮,导致增加数据时多次添加

解决:前端增加事件失效功能,后端增加锁机制

方法:

以下方法未试验过

1、代码锁(给代码的执行上锁,仅对单端口多进程有效,用户需等待前一请求处理结束)

import lock

lock.acquire()
你的业务逻辑
lock.release()

阅读全文

问题:sqlalchemy如何对同一张表查询两次?

解决:使用sqlalchemy.orm模块中的aliased

方法:

from sqlalchemy.orm import aliased

ToUser = aliased(User)
self.db.query(
    User.id, User.username, ToUser.id.label('to_user'), ToUser.username.label('to_username'),
    Reply.body, Reply.create_time).filter(Reply.to_user == ToUser.id, Reply.create_id == User.id
    ).all()

阅读全文

问题:sqlalchemy对应的select as是什么?

方法:

from sqlalchemy import literal
self.db.query(
    User.name.label('username'), Grade.name.label('grade_name'),
    literal('天鸿小学').label('school_name')).filter(User.grade_id == Grade.id).all()

阅读全文

问题:使用sqlalchemy如何随机获取数据?

解决:使用self.db.execute解析原生sql

方法:

user = self.db.execute(
    """SELECT * FROM users AS t1 JOIN(
        SELECT ROUND(
            RAND() * ((SELECT MAX(id) FROM users)-(SELECT MIN(id) FROM users))
            +(SELECT MIN(id) FROM users)
            ) AS rid
        ) AS t2
WHERE t1.id >= t2.rid
ORDER BY t1.id LIMIT 1;""").fetchone()
注:只能产生一条随机数据,产生多条时可使用fechall(),但是是顺序下去的

products = self.db.execute(
    "select id from products order by rand() limit 10;").fetchall()
这种方法是可以产生多条数据的
考虑到此方法效率不高,建议使用循环调用方法一

参考:

http://www.mantutu.com/index.php/mysql/271.html