后端-排坑

1|0后端排坑

1|1一、SQL Server数据库

1|01. 时间字段的处理

1. CONVERT(VarChar(10), CREATE_TIME, 120) # 对于时间类型是datetime的字段的值,将其处理为年-月-日格式 2. CONVERT(VarChar(7), CREATE_TIME, 120) # 对于时间类型是datetime的字段的值,将其处理为年-月格式 3. 数据库的时间字段可以直接用相同格式的字符串类型的时间进行比较(大于,小于,等于,赋值...)

1|02. 分组查询出每组数据的第N行的所有数据

(SELECT USER_ID,SUM_DURATION FROM ( SELECT row_number() over(partition by user_id ORDER BY CREATE_TIME desc ) tn,* FROM SEODB.DBO.VIP_BUY_ORDER WHERE STATE=1 ) TB WHERE TB.tn=1 ) # 表示以user_id 分组,以时间降序排序,查询出每个用户排序后的第一行数据 # tn, 后面的 * 为查询所有字段,可以随意更改,但需要注意的是最外层查询的字段在内层查询的字段中必须含有 # 注意筛选条件应该在 表名后面加,在TB.tn=1后面加条件是无用的

1|03. 数据库查询即时分页

# 原理: 从第多少行开始(不含开始的这一行), 再查询多少行,total_count为总数居条数 condition = ' 1=1 ' page = current_page - 1 page_size = 20 F""" SELECT WORD,NUM_BUYER,NUM_SELLER,CONVERT(VarChar(10), UPDATE_TIME, 120) AS DATE,total_count = COUNT(*) OVER() FROM solr.dbo.USER_VIP_SEAR WHERE {condition} order by UPDATE_TIME DESC, ID DESC offset {page} * {page_size} ROWS FETCH NEXT {page_size} ROWS ONLY"""

1|2二、简单的分页器

这种分页器只适用于数据量较小的数据的分页(原理是将数据全部查询出来后进行切片)

class PaginationPost(object): def __init__(self, current_page, all_count, per_page_num=10, pager_count=5, url=''): """ 封装分页相关数据 :param current_page: 当前页 :param all_count: 数据库中的数据总条数 :param per_page_num: 每页显示的数据条数 :param pager_count: 最多显示的页码个数 用法: queryset = model.objects.all() page_obj = Pagination(current_page,all_count) page_data = queryset[page_obj.start:page_obj.end] 获取数据用page_data而不再使用原始的queryset 获取前端分页样式用page_obj.page_html """ try: current_page = int(current_page) except Exception as e: current_page = 1 if current_page < 1: current_page = 1 self.url = url self.current_page = current_page self.all_count = all_count self.per_page_num = per_page_num # 总页码 all_pager, tmp = divmod(all_count, per_page_num) if tmp: all_pager += 1 self.all_pager = all_pager self.pager_count = pager_count self.pager_count_half = int((pager_count - 1) / 2) @property def start(self): return (self.current_page - 1) * self.per_page_num @property def end(self): return self.current_page * self.per_page_num def page_html(self): # 如果总页码 < 11个: if self.all_pager <= self.pager_count: pager_start = 1 pager_end = self.all_pager + 1 # 总页码 > 11 else: # 当前页如果<=页面上最多显示11/2个页码 if self.current_page <= self.pager_count_half: pager_start = 1 pager_end = self.pager_count + 1 # 当前页大于5 else: # 页码翻到最后 if (self.current_page + self.pager_count_half) > self.all_pager: pager_end = self.all_pager + 1 pager_start = self.all_pager - self.pager_count + 1 else: pager_start = self.current_page - self.pager_count_half pager_end = self.current_page + self.pager_count_half + 1 page_html_list = [] # 添加前面的nav和ul标签 page_html_list.append(''' <nav aria-label='Page navigation>' <ul class='pagination'> ''') first_page = '<li><a onclick="page_data(\'%s?page=%s\')" style="cursor:pointer">首页</a></li>' % (self.url,1) page_html_list.append(first_page) if self.current_page <= 1: prev_page = '<li class="disabled"><a href="#">上一页</a></li>' else: prev_page = '<li><a onclick="page_data(\'%s?page=%s\')" style="cursor:pointer">上一页</a></li>' % (self.url,self.current_page - 1,) page_html_list.append(prev_page) for i in range(pager_start, pager_end): if i == self.current_page: temp = '<li class="active"><a onclick="page_data(\'%s?page=%s\')" style="cursor:pointer">%s</a></li>' % (self.url,i, i,) else: temp = '<li><a onclick="page_data(\'%s?page=%s\')" style="cursor:pointer">%s</a></li>' % (self.url,i, i,) page_html_list.append(temp) if self.current_page >= self.all_pager: next_page = '<li class="disabled"><a href="#">下一页</a></li>' else: next_page = '<li><a onclick="page_data(\'%s?page=%s\')" style="cursor:pointer">下一页</a></li>' % (self.url,self.current_page + 1,) page_html_list.append(next_page) last_page = '<li><a onclick="page_data(\'%s?page=%s\')" style="cursor:pointer">尾页</a></li>' % (self.url,self.all_pager,) page_html_list.append(last_page) # 尾部添加标签 page_html_list.append(''' </nav> </ul> ''') return ''.join(page_html_list) # 函数内部调用 @bp.route('/activity/2020-08/data', methods=['POST']) @verify_logined def activity_2020_08_data(): data = g.restful.request('activity_2020_08_data', **request.form.to_dict()) if data['state'] == 0: page_obj = Pagination(current_page=request.args.get('page', 1), all_count=len(data['data']), url='/activity/2020-08/data') data['data'] = data['data'][page_obj.start:page_obj.end] data['page_html'] = page_obj.page_html() return jsonify(data) # 前端页面的调用 <div class="my_page"></div> $('.my_page').html(data.page_html); // 点击页码事件 function page_data(url) { $('.overlay').removeClass('none'); $.ajax({ url: url, type: 'post', dataType: 'json', data: params, success: function (pagedata) { if (pagedata.state === 0) { load_list(data.data, data.page_html) $('.overlay').addClass('none'); } } }) }

1|3三、flask框架

1|01. 蓝图

1|02. flask开启多线程或多进程

flask只能开启多进程或多线程的其中一个, 开启多线程: app.run(threaded=True) ; 开启多进程:app.run(processes=大于1的数字) ,processes默认下为1,threaded默认下为False 注意: 在DEBUG值为True,即DEBUG环境下,开启多线程是无效的;windows环境下,flask不支持开启多进程。

1|4四、python基础相关

1|01. 保留小数

  • round():低版本(3.6之前)的python解释器使用round()方法被除数为整形时,结果不会保留小数。解决方法:将被除数用float转成浮点型再做运算。使用round()方法的好处是会四舍五入

  • 格式化输出(不会四舍五入)

    • login_rate = '%.1f' % (curr_login_user['CURR_LOGIN_COUNT'] / all_diamond_user['DIAMOND_COUNT'] * 100)

1|5五、 时间与字符串的转换

# 字符串转时间: datetime.datetime.strptime(str_time,'%Y-%m-%d %H:%M:%S') # 时间转字符串 datetime.datetime.strftime(now_time,'%Y-%m-%d %H:%M:%S')

2|0六、 Linux系统基础命令

安装软件命令: centor-os: yum install net-tools yum install nano ubantu: apt-get install net-tools apt-get install -y nano 查看某端口的使用情况: netstat -anp |grep 端口号

3|0七、 Docker 基础命令

下载安装镜像容器: docker pull 镜像名:版本 docker ps -a 所有已安装的容器情况 docker images 所有镜像 进入容器: docker exec -it 容器id /bin/bash 停止所有容器:docker stop $(docker ps -a -q) 卸载所有容器:docker rm $(docker ps -a -q) 删除所有镜像:docker rmi $(docker images -q)

__EOF__

本文作者BigSun丶
本文链接https://www.cnblogs.com/Mcoming/p/13609123.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   BigSun丶  阅读(179)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示