models.py

class CompanyGoodsModel(Base):
id=Column(Integer, primary_key=True)
company_id = Column(Integer)
。。。
#我们在model中定义一个to_json方法,来获取模型的数据
def to_json(self):
dict = self.__dict__
if "_sa_instance_state" in dict:
del dict["_sa_instance_state"]
return dict
def get_info_by_id(company_id, category_id):
if company_id:
data=CompanyGoodsModel.query.filter(CompanyGoodsModel.company_id == company_id).all()
return data
elif category_id:
data = CompanyGoodsModel.query.filter(CompanyGoodsModel.category_id == category_id).all()
return data

然后在视图层中

@api.route('/company_goods', methods=['GET', 'POST'])
def company_goods():
if request.method == 'GET':
company_id = request.args.get('company_id', '')
category_id = request.args.get('category_id', '')
data=CompanyGoodsModel.get_info_by_id(company_id, category_id)
result=[]
for d in data:
d.goods_info=eval(d['goods_info'])
result.append(d.to_json())
if not result:
return json_response('', {}, '数据获取失败 ')
return json_response('', result, '数据获取成功')

Flask更改和加密密码

from werkzeug.security import generate_password_hash, check_password_hash
class CompanyUser(Base):
if change_db:
__bind_key__ = 'normal_db'
else:
pass
__tablename__ = 'partner_user'
_password = Column('password', String(300)) @property
def password(self):
return self._password @password.setter
def password(self, raw):
self._password = generate_password_hash(raw) def check_password(self, raw):
return check_password_hash(self._password, raw)

在更改密码的时候,直接将明文存储在该字段上即可

sqlalchemy模糊查询

queryset = CompanyUser.query.filter(or_(CompanyUser.username.like('%{}%'.format(search)),
CompanyUser.phone_number.like('%{}%'.format(search)))).all()

原生Flask分页

假设 page_index=1,page_size=10;所有分页查询不可以再跟first(),all()等

1.用offset()设置索引偏移量,limit()限制取出

#filter语句后面可以跟order_by语句
db.session.query(User.name).filter(User.email.like('%'+email+'%')).
limit(page_size).offset((page_index-1)*page_size) 2.用slice(偏移量,取出量)函数 #filter语句后面可以跟order_by语句
db.session.query(User.name).filter(User.email.like('%'+email+'%')).slice((page_index - 1) *
page_size, page_index * page_size)
注释:此方法和第一种相同的效果。
因为:由一下内部方法可知,slice()函数第一个属性就是offset()函数值,第二个属性就是limit()函数值 @_generative(_no_statement_condition)
def slice(self, start, stop):
"""apply LIMIT/OFFSET to the ``Query`` based on a "
"range and return the newly resulting ``Query``.""" if start is not None and stop is not None:
self._offset = (self._offset or 0) + start
self._limit = stop - start
elif start is None and stop is not None:
self._limit = stop
elif start is not None and stop is None:
self._offset = (self._offset or 0) + start if self._offset == 0:
self._offset = None @_generative(_no_statement_condition)
def limit(self, limit):
"""Apply a ``LIMIT`` to the query and return the newly resulting ``Query``. """
self._limit = limit @_generative(_no_statement_condition)
def offset(self, offset):
"""Apply an ``OFFSET`` to the query and return the newly resulting
``Query``. """
self._offset = offset
3.用paginate(偏移量,取出量)函数,用于BaseQuery user_obj=User.query.filter(User.email.like('%'+email+'%')).paginate(int(page_index),
int(page_size),False)
#遍历时要加上items
object_list =user_obj.items
4.filter中使用limit #此处不能再跟order_by语句,否则报错
db.session.query(User.name).filter(User.email.like('%'+email+'%') and limit (page_index - 1) *
page_size, page_size)

有关flask的教程博文

https://me.csdn.net/qq_38949193

字符串时间和时间戳之间的互转

import time, datetime

tssl = '2019-11-9'

def date2timestamp(date):
timeArray = time.strptime(date, "%Y-%m-%d")
timeStamp = int(time.mktime(timeArray))
return timeStamp def timestamp2date(timestamp):
timeStamp = 1381419600
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
return otherStyleTime print(date2timestamp(tssl))
print(date2timestamp('2019-11-10') - date2timestamp(tssl)) print(timestamp2date(tssl))

sqlalchemy的简单增删查改

增加:

def add_data():
p1 = Person(name='zhiliao1',age=19,country='china')
p2 = Person(name='zhiliao2',age=20,country='china')
session.add_all([p1,p2])
session.commit() # 查
def search_data():
#获取所有的对象,query类型
# all_person = session.query(Person).all()
# for p in all_person:
# print(p)
# print(p.name)
# all_person = session.query(Person).filter_by(name='zhiliao').all()
# for x in all_person:
# print(x)
# all_person = session.query(Person).filter(Person.name=='zhiliao').all()
# print(all_person) # [<__main__.Person object at 0x0000015BCE1B4630>]
# for x in all_person:
# print(x)
person = session.query(Person).first()
print(person) # 改
def update_data():
person = session.query(Person).first()
person.name = 'ketang'
session.commit() # 删
def delete_data():
person = session.query(Person).first()
session.delete(person)
session.commit()

python将字符串类型改成日期类型

 

将字符串类型的'2019-03-14'改成date类型,如下:

import datetime

b = datetime.date(*map(int,'2019-03-14'.split('-')))
print(b,type(b))

将datetime类型转成str

form datetime import datetime

str_date = datetime.now().strftime("%Y-%m-%d") 

将str类型转成datetime

form datetime import datetime

start_date = datetime.strptime("2019-04-15", "%Y-%m-%d") 

连表查询

data = a.query.join(c, c.id == a.company_id).add_columns(
a.id, a.create_date, a.rating, a.is_display, a.comment, a.customer_id, a.company_id).filter(
a.rating < 3, a.is_display == display, or_(c.company_name.contains(search),
c.phone_number == search)).limit(page_size).offset((page_index - 1) * page_size)

将字符串的日期转化为datetime格式

start_date = datetime.date(*map(int, datas['start_date'].split('-')))

使用pandas生成excel表格

import pandas as pd
import os,time file_path = os.path.abspath('.')+'/'+str(time.time()).split('.')[0] + '.xlsx'
print(file_path)
df=pd.DataFrame({'ID':[1,2,3],'Name':['tom','sim','victor']})
df.to_excel(file_path) print('done!')

用xlsxwriter包写入Excel文件

data数据就是一个答列表,里面有一个个的字典,字典里面的value可能是字典,也可能是空字典,还有可能是字符串
"""
import xlsxwriter # 写excel
def write_excel():
workbook = xlsxwriter.Workbook('chat.xlsx') # 创建一个excel文件
worksheet = workbook.add_worksheet(u'sheet1') # 在文件中创建一个名为TEST的sheet,不加名字默认为sheet1 worksheet.set_column('A:A', 20) # 设置第一列宽度为20像素
bold = workbook.add_format({'bold': True}) # 设置一个加粗的格式对象 worksheet.write('A1', 'HELLO') # 在A1单元格写上HELLO
worksheet.write('A2', 'WORLD', bold) # 在A2上写上WORLD,并且设置为加粗
worksheet.write('B2', U'中文测试', bold) # 在B2上写上中文加粗 worksheet.write(2, 0, 32) # 使用行列的方式写上数字32,35,5
worksheet.write(3, 0, 35.5) # 使用行列的时候第一行起始为0,所以2,0代表着第三行的第一列,等价于A4
worksheet.write(4, 0, '=SUM(A3:A4)') # 写上excel公式
workbook.close() if __name__ == '__main__':
# 写入Excel
write_excel()
print('写入成功')
""" import xlsxwriter
import time
import os
import json
from test01 import data
import math def write_excel():
file_path = os.path.abspath('.') + '\\' + str(time.time()).split('.')[0] + '.xlsx'
work_book = xlsxwriter.Workbook(file_path)
work_sheet = work_book.add_worksheet(u'sheet1')
bold = work_book.add_format({'bold': True})
columns = []
for i in data[0].keys():
columns.append(i)
work_sheet.set_column(f'A:{chr(len(columns)+ ord("A"))}', 20) # 空格的长度 work_sheet.write(str(chr(ord('A')+math.ceil(len(columns)/2)))+'', U'欧阳国勇的表格', bold)
# print('A'+str(math.ceil(len(columns)/2)-1))
# print(str(chr(ord('A')+math.ceil(len(columns)/2)))+'1',type(str(chr(ord('A')+math.ceil(len(columns)/2)))))
datas = []
for i in data:
dd = []
for j in i.values():
dd.append(j)
datas.append(dd)
datas.insert(0, columns)
for i in datas:
if i == {}:
continue
for j in i:
middle_value = j
if j=={}:
middle_value = 'fuck'
if isinstance(j, dict):
middle_value = str(j) work_sheet.write(datas.index(i)+2, i.index(j), middle_value) work_book.close() if __name__ == '__main__':
a = write_excel()
print(a)

UUID

UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Universally Unique IDentifier,Python 中叫 UUID。
它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。
UUID主要有五个算法,也就是五种方法来实现。 uuid1()——基于时间戳。由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。
uuid2()——基于分布式计算环境DCE(Python中没有这个函数)。算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。实际中很少用到该方法。
uuid3()——基于名字的MD5散列值。通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。
uuid4()——基于随机数。由伪随机数得到,有一定的重复概率,该概率可以计算出来。
uuid5()——基于名字的SHA-1散列值。算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法。

postgresql时间自动生成

ALTER TABLE sys_backend_log OWNER TO postgres;
GRANT ALL ON TABLE sys_backend_log TO zexingj;
CREATE TRIGGER sys_backend_log_create_tri BEFORE INSERT ON sys_backend_log FOR EACH ROW EXECUTE PROCEDURE create_func();
CREATE TRIGGER sys_backend_log_update_tri BEFORE UPDATE ON sys_backend_log FOR EACH ROW EXECUTE PROCEDURE update_func();

python生成excel表格数据

    def download_excel(data):
# 拼接文件路径
file_path = os.path.abspath('.') + '\\' + 'excel_file' + '\\' + str(time.time()).split('.')[0] + '.xlsx'
work_book = xlsxwriter.Workbook(file_path) # 新建工作表
work_sheet = work_book.add_worksheet(u'sheet1') # 创建工作区
bold = work_book.add_format({'bold': True}) # 字体加黑
columns = [
'操作人', '执行事件', '被操作事物名称', '操作缘由', '操作时间',
'门店名', '手机号', '标题', '支付方式', '商品说明',
'创建时间', '订单号', '支付金额', '审核结果'] work_sheet.set_column(f'A:{chr(len(columns)+ ord("A"))}', 20) # 设置数据覆盖到的第一行每格宽度
# 写第一行的数据
work_sheet.write(str(chr(ord('A') + len(columns) // 2)) + '', U'审核-商户端-产品订单退款', bold)
datas = []
for i in data:
try:
sys_log_info = SysBackendLogModel.query.filter(SysBackendLogModel.create_id == str(i['key'])).first()
except Exception as e:
print(e)
sys_log_info = ''
print(sys_log_info)
initiator = sys_log_info.initiator if sys_log_info is not None else '无'
operation = sys_log_info.operation if sys_log_info is not None else '无'
receiver = sys_log_info.receiver if sys_log_info is not None else '无'
reason = sys_log_info.reason if sys_log_info is not None else '无'
create_date = sys_log_info.create_date if sys_log_info is not None else '无'
datas.append([initiator, operation, receiver, reason, create_date,
i['buy_company_info']['company_name'] if i['buy_company_info'] else '无',
i['buy_company_info']['phone_number'] if i['buy_company_info'] else '无',
i['product_info']['title'] if i['product_info'] else '无',
i['product_order_info']['payment_method'] if i['product_order_info'] else '无',
i['product_info']['product_desc'] if i['product_info'] else '无',
i['product_order_info']['order_date'] if i['product_order_info'] else '无',
i['product_order_info']['trade_no'] if i['product_order_info'] else '无',
i['product_order_info']['paid_amount'] if i['product_order_info'] else '无',
'退款中' if i['status'] == 3 else '已退款']) print(datas)
datas.insert(0, columns) for m, i in enumerate(datas): # m就是 datas元素的索引
print(m)
if i == {}:
continue
for n, j in enumerate(i): # n就是列表i元素的索引
work_sheet.write(m + 1, n, str(j)) work_book.close()
return file_path
    def file_iterator(file_path, chunk_size=512):
"""
文件读取迭代器
:param file_path:文件路径
:param chunk_size: 每次读取流大小
:return:
"""
with open(file_path, 'rb') as target_file:
while True:
chunk = target_file.read(chunk_size)
if chunk:
yield chunk
else:
break
 file_path = CompanyProductOrderModel.download_excel(data[0])
data = CompanyProductOrderModel.file_iterator(file_path)
filename = os.path.basename(file_path)
response = Response(data)
response.headers['Content-Type'] = 'application/octet-stream'
response.headers["Content-Disposition"] = 'attachment;filename="{}"'.format(filename)
# if os.path.exists(file_path):os.remove(file_path) # 删除文件夹
return response

地图相关值坐标反差

def get_lati_and_longi(city, address):
url = 'https://restapi.amap.com/v3/geocode/geo?key={}&address={}&city={}'
KEY = '需要去高德地图去登陆获取'
response = requests.get(url.format(KEY, address, city))
result = response.content.decode("utf-8")
result = json.loads(result)
return result['geocodes'][0]['location']

flask操作的更多相关文章

  1. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...

  2. flask 操作mysql的两种方式-sql操作

    flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...

  3. [py]flask操作cookie&django的seesion和cookie机制

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  4. flask 操作数据库(分类)

    数据库 数据库是大多数动态web程序的基础设施,只要你想把数据存下来,就离不开数据库. 这里所说的数据库指的是有存储数据的单个或多个文件组成的集合,它是一种容器,可以类比文文件柜.而人们通常使用数据库 ...

  5. flask操作mongo两种方式--ORM

    #manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...

  6. flask操作mongo两种方式--常规

    #manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...

  7. 六十一:Flask.Session之flask操作session

    1.设置session:使用flask.session就可以操作字典,操作方式和操作字典一样:session['key']=value2.获取session,和获取字典的值一样:session['ke ...

  8. flask操作数据库 以及 建表

    创建迁移仓库 首先,安装Flask-Migrate: pip install flask-migrate 将app项目注册,便于使用orm操作 from flask_sqlalchemy import ...

  9. Flask 操作Mysql数据库 - flask-sqlalchemy扩展

    数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了表中 ...

随机推荐

  1. JN_0019:CMD命令窗口常用操作

    1,回到根目录下 cd\ 2,

  2. 基于Jupyter Notebooks的C# .NET Interactive安装与使用

    .NET Interactive发布预览版了,可以像Python那样用jupyter notebooks来编辑C#代码.具体可以在GitHub上查看dotnet/interactive项目. 安装步骤 ...

  3. 字节码操作、javassist使用

    一.功能 1.动态生成新的类 2.动态改变某个类的结构(添加.删除.修改   新的属性.方法) 二.优势 1.比反射开销小,性能高 2.JAVAasist性能高于反射,低于ASM 使用javassis ...

  4. Umi 小白纪实(三)—— 震惊!路由竟然如此强大!

    在<Umi 小白纪实(一)>中有提到过简单的路由配置和使用,但这只是冰山一角 借用一句广告词,Umi 路由的能量,超乎你的想象 一.基本用法 Umi 的路由根结点是全局 layout  s ...

  5. Python之基础、细节

    引号的用法 单引号对 ' ' :表示字符串,可以换行 双引号对 " " :表示字符串 三引号对 ''' ''' 和 """ ""& ...

  6. 高精度模板 支持各种运算 c++

    绪言 自从有了高精度模板,妈妈再也不用怕我不会打高精度了! 代码 代码长度与日俱增啊~~~ #include<iostream> #include<cstring> #incl ...

  7. Vue 项目中 外部js 如何获取 vue 实例

    1.将main.js 中的 Vue 实例暴露出去 2.在外部js中导入main.js (    import vm from '../main' );

  8. spark集群

    https://blog.csdn.net/boling_cavalry/article/details/86747258 https://www.cnblogs.com/xuliangxing/p/ ...

  9. HTML指定页面编码

    HTML指定页面编码 <meta charset="UTF-8" />

  10. maven的核心概念——生命周期

    第十一章生命周期 11.1 什么是Maven的生命周期 ●Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了. ●Maven有三套相互独立的生命周期, ...