flask-sqlalchemy 中的多对多关系模型问题记录
问题sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'mapped class Article->iy_article'. Original exception was: Error creating backref 'articles' on relationship 'Article.tags': property of that name exists on mapper 'mapped class Tag->iy_tag'
出现这个错误是因为两个关系表中互相定义,意思是你的代码中可能同时包含下面的语句:
# class Article:tags = db.relationship('Tag', seconda ...
如何使用 flask-celery 实现异步任务?
先决条件
redis版本redis-cli --versionredis-cli 5.0.4
celery版本celery --version4.3.0 (rhubarb)
Flask和 Python 版本flask --versionFlask 1.0.2Python 3.6.5 (default, Apr 1 2018, 05:46:30) [GCC 7.3.0]
Linux 版本lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 18.04 LTSRelease: 18.04Codename: bionic# ---uname -aLinux local 4.15.0-22-generic #24-Ubuntu SMP Wed May 16 12:15:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Celery是什么
概念Celery 是一个“自带电池”的专注于实时处理和任务调度的分布式任务队列,同时提供操作和维护分布 ...
我的开源博客 idealyard 心路历程及其他
今天(2019-09-12)基本完成了博客系统—— IdealYard 的雏形,当然,这距离臻于完美还有很长的路要走。但正所谓不怕走不到头,就怕一直不敢出发。虽然是个不起眼的项目,但是从无到有也消耗了不少精力,所以有必要做个简单记录。
缘起一切缘起,都要从丘处机路过牛家村的那个下午说起……早就想动手搭建一个属于自己的博客项目,但是作为一名出色的国家一级退堂鼓表演家,总是找各种理由,一直未能计划成型落实。最后,终于在 G 小姐的鼓舞下开始着手编码了。
技术选型因为主要开发语言是 Python,而目前 Python 社区已经发出公告将在 2020 年初停止 Python2 的维护。因此,选择使用 Python3 作为基本版本支持。在 框架选择 问题上,虽然之前主要使用 Web.py 开发,但鉴于 Web.py 目前的维护现状和社区活跃度,所以选择更受开发者青睐的 Flask 作为后端 web 开发框架;此外,使用到 Celery 做一些耗时请求异步处理,如注册验证邮件发送和博客数据库备份(由于时间关系暂时未做)。而前端则使用目前热门的框架 Vue 和 Element-UI 来构建。
心路 ...
Python 之 Web 开发框架对比——Flask vs Web.py
Python 常用的web开发框架有很多如Django、Flask、Tornado、Web.py等,我们之前项目中使用的是 Web.py,但是新项目中选择哪个?或许是个值得思考的问题。本文主要对Web.py和Flask进行一个简单的对比。
为什么要从Web.py迁移到Flask大势所趋。根据最新的Python 开发者调研-2018结果显示,Flask和Django已经成为最流行的web开发框架。对企业的良性发展和开发者个人成长而言,使用热门技术都是值得鼓励且必要的。而且,众所周知,官方计划在2020年停止Python2支持,而相比Flask而言,Web.py的版本更新计划有点跟不上节奏的感觉。
TL;DR,Flask 对比 Web.py 的不同点Flask拥有活跃的社区文化和丰富而强大的第三方扩展,而Web.py在原作者(Aaron Swartz)自杀之后自身维护已举步维艰,第三方扩展的发展更是不言而喻。
维护积极性 - 最新版本分别为Flask-1.0.2和 webpy-0.39。
官方文档 - Flask具有良好的官方文档,并且有国内使用者翻译 ...
MySQL 中存储 IP 地址应该选用何种数据类型?
今天在项目开发时,遇到需要在数据库中存储 ip 地址,那么应该选用何种数据类型更加高效呢?如果存储的是IPV4地址,可以选择使用INT UNSIGNED,然后借助 MySQL 自带的 INET_ATON() 和 INET_NTOA()来存取数据;如果存储的是IPV6地址,可以选择使用VARBINARY(),然后借助 INET6_ATON()和INET6_NTOA() (MySQL5.6+支持)方法存取数据。
针对IPv4地址mysql> select inet_aton('127.0.0.1');+------------------------+| inet_aton('127.0.0.1') |+------------------------+| 2130706433 |+------------------------+1 row in set (0.00 sec)mysql> select inet_ntoa(2130706433);+-----------------------+| inet ...
如何配置 PyCharm 使用远程的 Flask 虚拟开发环境?
学习Flask开发的时候,因为主机是Windows环境,而日常跑服务的是Linux环境,所以需要通过配置pycharm使之使用远端的虚拟环境。
创建虚拟机Flask环境略
此处在网上可以找到很多写好的教程,不需要我再次叠床架屋了。
配置Pycharm环境打开 Pycharm 的 setting 对话框,按照如下配置
依次输入真实远端信息之后,点击下一步,直到出现下方对话框
依次修改将要使用的解释器和主机与远端需要保持同步的目录;
如图设置之后运行,Run出现如下结果FLASK_APP = appFLASK_ENV = developmentFLASK_DEBUG = 1In folder D:/MYcode/flkssh://root@192.168.116.21:22/home/imoyao/envs/flk/bin/python -u -m flask run --host=0.0.0.0 * Serving Flask app "app" (lazy loading) * Environment: development * Debug mode ...
Python 传值还是传引用?| 通过对象引用传递
本文译自 Is Python pass-by-reference or pass-by-value?
“假设我对 Fat 说,或 Kevin 对 Fat 说,“你没有经历过上帝。你只不过经历了一些与上帝的品质、方面、性质、力量、智慧和善良有关的事情。”这就像是关于德国人讲的一个双重抽象倾向的笑话;德国英国文学权威宣称,“哈姆雷特不是莎士比亚写的;它只是由一个名叫莎士比亚的人写的。”在英语语境中,这句话的区别只是口头的,没有实际意义,尽管德语中这种表达存在差异(这解释了德国思想的一些奇怪特征)。” –Valis,p71(Book-of-the-Month-Club Edition)
Philip K. Dick 并不以其轻松或易懂的散文而闻名。绝大多数角色都很高。就像,真的,真的,真的很高。然而,在 Valis 的上述引文(1981 年出版)中,他对臭名昭着的Python参数传递范式给出了非常有远见的解释。越是变化,越是全能。(Plus ça change, plus c’est omnomnomnom drugs.)
在编程语言中参数传递的两种最广为人知且易于理解的方法是按引 ...
如何把当前改动追加到某次指定 commit 上(非上次)
注意:本例中使用Gerrit进行演示。
暂存目前修改的代码 git stashgit stash list # 可以验证暂存是否成功
查找到需要指定的commit的编号; git log
找到git rebase编号,即要修改的commit之前那个commit; git rebase --interactive a6f372877d26xxx0690aedf6dc6b6e7c
找到要更改的commit, 将行首的pick更改为edit, 保存退出;
本地修改需要修改的代码
恢复暂存的修改
git stash pop
注意:如果此时有冲突,需要自己手动解决冲突
解决冲突后,添加修改文件 git add xxx # 文件名称git commit --amend
回退到当前状态; git rebase --continue
注意:如果rebase版本较多,可能需要多次重复上述步骤,且每rebase一步,可能都要解决与其他组员commit的冲突;
rebase 到 master 之后,push 当前版本到远程 git push origin 0 ...
如何获取 Ztree 的所有叶子节点?
使用Ztree时,treeNode.children只能获取到子节点,该如何拿到节点的叶子节点呢?
创建初始化设置var setting = { data: { simpleData: { enable: true } }, callback: { onCheck:onCheck, }};
创建点击响应事件function onCheck(event, treeId, treeNode, clickFlag) { var treeObj = $(ELT).fn.zTree.getZTreeObj("datarecdirs"); var str = ""; str = getAllChildNodes(treeNode,str); // // 加上被选择节点自身 // str = str + ...
记一次 MySQL 错误 —— mysqld-dead-but-subsys-locked
记一次MySQL服务出错排查过程。
今天登录管理系统的时候输入账户信息没有反应,后台查看系统日志发现报错信息:# intailf /var/log/ODSP.log# out(部分有用信息)2019-01-25 11:30:07 database [line:263]: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
查看MySQL服务状态# in/etc/init.d/mysqld status# outmysqld dead but subsys locked
查看MySQL的log信息# intailf /var/log/mysqld.log# out(截取部分有用信息)700101 00:28:38 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended700101 00:28:42 mysqld_safe Starting mysqld daemon ...