分类 "Database" 下的文章

问题:因为是项目从mysql更换到达梦dm8数据库,同时数据库字段也需要更换为国标要求,使用column_property会有警告,改用synonym,但在Mixin类中会报错:sqlalchemy.exc.InvalidRequestError: Mapper properties (i.e. deferred,column_property(), relationship(), etc.) must be declared as @declared_attr callables on declarative mixin classes. For dataclass field() objects, use a lambda

解决:根据提示使用@declared_attr进行装饰

方法:

from sqlalchemy.ext.declarative import declarative_base, declared_attr
from sqlalchemy.orm import synonym
from db.session import engine
from sqlalchemy import (
    Column, Integer, String, DateTime)

Base = declarative_base()
Base.metadata.create_all(bind=engine)

阅读全文

问题:数据量大,分页查询时卡顿,如何解决?

解决:通过join方式,先查询主键,再查询内容

方法:

offset_num = (page - 1) * pagesize
sub_q = select(
    User.id).filter_by(**obj_get).order_by(
    User.id.asc()).offset(
    offset_num).limit(pagesize).subquery()
q = select(
    User.uid, User.username, User.fullname, User.national_id, User.phone, User.email,
    User.gender, User.last_login, User.status, User.create_time,
    User.expire_time).join(sub_q, User.id == sub_q.c.id)
r = await db.execute(q)
return r.all()

阅读全文

问题:redis如何只允许特定ip访问?

解决:redis好像不能指定特定ip访问,因为redis的配置文件中bind是绑定redis所在服务器的ip,而不是特定访问redis的ip

bind:是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。

如果指定了bind,则说明只允许来自指定网卡的Redis请求。如果没有指定,就说明可以接受来自任意一个网卡的Redis请求。

阅读全文

问题:数据库中出现好多重复数据,现在需要只保留最先的一条数据

方法:

SELECT
    * 
FROM
    table_name AS ta 
WHERE
    ta.唯一键 <> ( SELECT max( tb.唯一键 )
                  FROM table_name AS tb 
                  WHERE ta.判断重复的列 = tb.判断重复的列 );

阅读全文

问题:redis如何删除模糊匹配到的keys?

解决:配合xargs进行删除操作

方法:

./redis-cli -h [$Addr] -a [$Password] -p [$Port] -n [$db] keys "[$Key]*" | xargs ./redis-cli -h [$Addr] -a [$Password] -p [$Port] -n [$db] del

例如:

redis-cli -n 1 keys "school*" | xargs redis-cli -n 1 del

阅读全文