1.基于 oracle 的源码 flask 项目(四)——搜索查询
2.Pythonç¬è«å¦ä½åï¼
3.手把手教你搭建自己的量化分析数据库
4.tushare的接口怎么样使用?
5.FastAPI工具集-SQLAlchemy会话
6.ORM如何自己手写一个ORM框架
基于 oracle 的 flask 项目(四)——搜索查询
搜索功能是项目个性化需求的核心,用户可通过搜索不同字段获取多样报表。下载
实现搜索页面采用flask基本功能,源码代码详情请查阅文档。下载
在views.py中实现搜索功能,源码通过判断用户权限(管理员或普通用户)进行页面展示。下载gitlab 源码详解
展示两个页面的源码搜索功能实现,分别对应管理员和普通用户权限。下载
结果展示动图未提供,源码建议直接访问链接查看。下载
展示的源码是管理员权限的用户界面,操作流程清晰可见。下载
实现方法虽然较为繁琐,源码但通过掌握SQL语句与SQLAlchemy的下载结合使用,可提高效率。源码如果有SQLAlchemy化处理CASE语句的技能,欢迎分享。
如需源码,请自行下载。
Pythonç¬è«å¦ä½åï¼
å æ£æ¥æ¯å¦æAPI
APIæ¯ç½ç«å®æ¹æä¾çæ°æ®æ¥å£ï¼å¦æéè¿è°ç¨APIééæ°æ®ï¼åç¸å½äºå¨ç½ç«å 许çèå´å ééï¼è¿æ ·æ¢ä¸ä¼æéå¾·æ³å¾é£é©ï¼ä¹æ²¡æç½ç«æ æ设置çéç¢ï¼ä¸è¿è°ç¨APIæ¥å£ç访é®åå¤äºç½ç«çæ§å¶ä¸ï¼ç½ç«å¯ä»¥ç¨æ¥æ¶è´¹ï¼å¯ä»¥ç¨æ¥éå¶è®¿é®ä¸éçãæ´ä½æ¥çï¼å¦ææ°æ®ééçéæ±å¹¶ä¸æ¯å¾ç¬ç¹ï¼é£ä¹æAPIååºä¼å éç¨è°ç¨APIçæ¹å¼ã
æ°æ®ç»æåæåæ°æ®åå¨
ç¬è«éæ±è¦ååæ¸ æ°ï¼å ·ä½è¡¨ç°ä¸ºéè¦åªäºå段ï¼è¿äºå段å¯ä»¥æ¯ç½é¡µä¸ç°æçï¼ä¹å¯ä»¥æ¯æ ¹æ®ç½é¡µä¸ç°æçå段è¿ä¸æ¥è®¡ç®çï¼è¿äºå段å¦ä½æ建表ï¼å¤å¼ 表å¦ä½è¿æ¥çãå¼å¾ä¸æçæ¯ï¼ç¡®å®å段ç¯èï¼ä¸è¦åªçå°éçç½é¡µï¼å 为å个ç½é¡µå¯ä»¥ç¼ºå°å«çåç±»ç½é¡µçå段ï¼è¿æ¢æå¯è½æ¯ç±äºç½ç«çé®é¢ï¼ä¹å¯è½æ¯ç¨æ·è¡ä¸ºçå·®å¼ï¼åªæå¤è§å¯ä¸äºç½é¡µæè½ç»¼åæ½è±¡åºå ·ææ®éæ§çå ³é®å段ââè¿å¹¶ä¸æ¯å åéçå 个ç½é¡µå°±å¯ä»¥å³å®çç®åäºæ ï¼å¦æéä¸äºé£ç§èè¿ãæ··ä¹±çç½ç«ï¼å¯è½åé常å¤ã
对äºå¤§è§æ¨¡ç¬è«ï¼é¤äºæ¬èº«è¦ééçæ°æ®å¤ï¼å ¶ä»éè¦çä¸é´æ°æ®ï¼æ¯å¦é¡µé¢Idæè urlï¼ä¹å»ºè®®åå¨ä¸æ¥ï¼è¿æ ·å¯ä»¥ä¸å¿ æ¯æ¬¡éæ°ç¬åidã
æ°æ®åºå¹¶æ²¡æåºå®çéæ©ï¼æ¬è´¨ä»æ¯å°Pythonéçæ°æ®åå°åºéï¼å¯ä»¥éæ©å ³ç³»åæ°æ®åºMySQLçï¼ä¹å¯ä»¥éæ©éå ³ç³»åæ°æ®åºMongoDBçï¼å¯¹äºæ®éçç»æåæ°æ®ä¸è¬åå¨å ³ç³»åæ°æ®åºå³å¯ãsqlalchemyæ¯ä¸ä¸ªæç好ç¨çæ°æ®åºè¿æ¥æ¡æ¶ï¼å ¶å¼æå¯ä¸Pandasé å¥ä½¿ç¨ï¼ææ°æ®å¤çåæ°æ®åå¨è¿æ¥èµ·æ¥ï¼ä¸æ°åµæã
æ°æ®æµåæ
对äºè¦æ¹éç¬åçç½é¡µï¼å¾ä¸ä¸å±ï¼çå®çå ¥å£å¨åªéï¼è¿ä¸ªæ¯æ ¹æ®ééèå´æ¥ç¡®å®å ¥å£ï¼æ¯å¦è¥åªæ³ç¬ä¸ä¸ªå°åºçæ°æ®ï¼é£ä»è¯¥å°åºç主页åå ¥å³å¯ï¼ä½è¥æ³ç¬å ¨å½æ°æ®ï¼ååºæ´å¾ä¸ä¸å±ï¼ä»å ¨å½çå ¥å£åå ¥ãä¸è¬çç½ç«ç½é¡µé½ä»¥æ ç¶ç»æ为主ï¼æ¾å°åå ¥ç¹ä½ä¸ºæ ¹èç¹ä¸å±å±å¾éè¿å ¥å³å¯ã
å¼å¾æ³¨æçä¸ç¹æ¯ï¼ä¸è¬ç½ç«é½ä¸ä¼ç´æ¥æå ¨éçæ°æ®åæå表ç»ä½ ä¸é¡µé¡µå¾ä¸ç¿»ç´å°éåå®æ°æ®ï¼æ¯å¦é¾å®¶ä¸é¢å¾æ¸ æ¥å°åçæå¥äºææ¿ï¼ä½æ¯å®åªç»é¡µï¼æ¯é¡µä¸ªï¼å¦æç´æ¥è¿ä¹åå ¥åªè½è®¿é®ä¸ªï¼è¿è¿ä½äºçå®æ°æ®éï¼å æ¤å åçï¼åæ´åçæ°æ®æç»´å¯ä»¥è·å¾æ´å¤§çæ°æ®éãæ¾ç¶é¡µæ¯ç³»ç»è®¾å®ï¼åªè¦è¶ è¿ä¸ªå°±åªæ¾ç¤ºé¡µï¼å æ¤å¯ä»¥éè¿å ¶ä»ççéæ¡ä»¶ä¸æç»åï¼åªå°çéç»æå°äºçäºé¡µå°±è¡¨ç¤ºè¯¥æ¡ä»¶ä¸æ²¡æ缺æ¼ï¼æåæåç§æ¡ä»¶ä¸ççéç»æéåå¨ä¸èµ·ï¼å°±è½å¤å°½å¯è½å°è¿åçå®æ°æ®éã
æç¡®äºå¤§è§æ¨¡ç¬è«çæ°æ®æµå¨æºå¶ï¼ä¸ä¸æ¥å°±æ¯é对å个ç½é¡µè¿è¡è§£æï¼ç¶åæè¿ä¸ªæ¨¡å¼å¤å¶å°æ´ä½ã对äºå个ç½é¡µï¼éç¨æå å·¥å ·å¯ä»¥æ¥çå®ç请æ±æ¹å¼ï¼æ¯getè¿æ¯postï¼æ没ææ交表åï¼æ¬²ééçæ°æ®æ¯åå ¥æºä»£ç éè¿æ¯éè¿AJAXè°ç¨JSONæ°æ®ã
åæ ·çéçï¼ä¸è½åªçä¸ä¸ªé¡µé¢ï¼è¦è§å¯å¤ä¸ªé¡µé¢ï¼å 为æ¹éç¬è«è¦å¼æ¸ è¿äºå¤§é页é¢url以ååæ°çè§å¾ï¼ä»¥ä¾¿å¯ä»¥èªå¨æé ï¼æçç½ç«çurl以åå ³é®åæ°æ¯å å¯çï¼è¿æ ·å°±æ²å§äºï¼ä¸è½é çææ¾çé»è¾ç´æ¥æé ï¼è¿ç§æ åµä¸è¦æ¹éç¬è«ï¼è¦ä¹æ¾å°å®å å¯çjs代ç ï¼å¨ç¬è«ä»£ç ä¸å å ¥ä»ææå°å¯ç çå å¯è¿ç¨ï¼è¦ä¹éç¨ä¸ææè¿°ç模ææµè§å¨çæ¹å¼ã
æ°æ®éé
ä¹åç¨Råç¬è«ï¼ä¸è¦ç¬ï¼Rçç¡®å¯ä»¥åç¬è«å·¥ä½ï¼ä½å¨ç¬è«æ¹é¢ï¼Pythonæ¾ç¶ä¼å¿æ´ææ¾ï¼åä¼æ´å¹¿ï¼è¿å¾çäºå ¶æççç¬è«æ¡æ¶ï¼ä»¥åå ¶ä»çå¨è®¡ç®æºç³»ç»ä¸æ´å¥½çæ§è½ãscrapyæ¯ä¸ä¸ªæççç¬è«æ¡æ¶ï¼ç´æ¥å¾éå¥ç¨å°±å¥½ï¼æ¯è¾éåæ°æå¦ä¹ ï¼requestsæ¯ä¸ä¸ªæ¯åççurllibå æ´ç®æ´å¼ºå¤§çå ï¼éåä½å®å¶åçç¬è«åè½ãrequests主è¦æä¾ä¸ä¸ªåºæ¬è®¿é®åè½ï¼æç½é¡µçæºä»£ç ç»downloadä¸æ¥ãä¸è¬èè¨ï¼åªè¦å ä¸è·æµè§å¨åæ ·çRequests Headersåæ°ï¼å°±å¯ä»¥æ£å¸¸è®¿é®ï¼status_code为ï¼å¹¶æåå¾å°ç½é¡µæºä»£ç ï¼ä½æ¯ä¹ææäºåç¬è«è¾ä¸ºä¸¥æ ¼çç½ç«ï¼è¿ä¹ç´æ¥è®¿é®ä¼è¢«ç¦æ¢ï¼æè 说status为ä¹ä¸ä¼è¿åæ£å¸¸çç½é¡µæºç ï¼èæ¯è¦æ±åéªè¯ç çjsèæ¬çã
ä¸è½½å°äºæºç ä¹åï¼å¦ææ°æ®å°±å¨æºç ä¸ï¼è¿ç§æ åµæ¯æç®åçï¼è¿å°±è¡¨ç¤ºå·²ç»æåè·åå°äºæ°æ®ï¼å©ä¸çæ éå°±æ¯æ°æ®æåãæ¸ æ´ãå ¥åºãä½è¥ç½é¡µä¸æï¼ç¶èæºä»£ç é没æçï¼å°±è¡¨ç¤ºæ°æ®åå¨å ¶ä»å°æ¹ï¼ä¸è¬èè¨æ¯éè¿AJAXå¼æ¥å è½½JSONæ°æ®ï¼ä»XHRä¸æ¾å³å¯æ¾å°ï¼å¦æè¿æ ·è¿æ¾ä¸å°ï¼é£å°±éè¦å»è§£æjsèæ¬äºã
解æå·¥å ·
æºç ä¸è½½åï¼å°±æ¯è§£ææ°æ®äºï¼å¸¸ç¨çæ两ç§æ¹æ³ï¼ä¸ç§æ¯ç¨BeautifulSoup对æ ç¶HTMLè¿è¡è§£æï¼å¦ä¸ç§æ¯éè¿æ£å表达å¼ä»ææ¬ä¸æ½åæ°æ®ã
BeautifulSoupæ¯è¾ç®åï¼æ¯æXpathåCSSSelector两ç§éå¾ï¼èä¸åChromeè¿ç±»æµè§å¨ä¸è¬é½å·²ç»æå个ç»ç¹çXpathæè CSSSelectoræ 记好äºï¼ç´æ¥å¤å¶å³å¯ã以CSSSelector为ä¾ï¼å¯ä»¥éæ©tagãidãclassçå¤ç§æ¹å¼è¿è¡å®ä½éæ©ï¼å¦ææid建议éidï¼å ä¸ºæ ¹æ®HTMLè¯æ³ï¼ä¸ä¸ªidåªè½ç»å®ä¸ä¸ªæ ç¾ã
æ£å表达å¼å¾å¼ºå¤§ï¼ä½æé èµ·æ¥æç¹å¤æï¼éè¦ä¸é¨å»å¦ä¹ ãå 为ä¸è½½ä¸æ¥çæºç æ ¼å¼å°±æ¯å符串ï¼æ以æ£å表达å¼å¯ä»¥å¤§æ¾èº«æï¼èä¸å¤çé度å¾å¿«ã
对äºHTMLç»æåºå®ï¼å³åæ ·çå段å¤tagãidåclasså称é½ç¸åï¼éç¨BeautifulSoup解ææ¯ä¸ç§ç®åé«æçæ¹æ¡ï¼ä½æçç½ç«æ··ä¹±ï¼åæ ·çæ°æ®å¨ä¸å页é¢é´HTMLç»æä¸åï¼è¿ç§æ åµä¸BeautifulSoupå°±ä¸å¤ªå¥½ä½¿ï¼å¦ææ°æ®æ¬èº«æ ¼å¼åºå®ï¼åç¨æ£å表达å¼æ´æ¹ä¾¿ãæ¯å¦ä»¥ä¸çä¾åï¼è¿ä¸¤ä¸ªé½æ¯æ·±å³å°åºæ个å°æ¹çç»åº¦ï¼ä½ä¸ä¸ªé¡µé¢çclassæ¯longï¼ä¸ä¸ªé¡µé¢çclassæ¯longitudeï¼æ ¹æ®classæ¥éæ©å°±æ²¡åæ³åæ¶æ»¡è¶³2个ï¼ä½åªè¦æ³¨æå°æ·±å³å°åºçç»åº¦é½æ¯ä»äºå°ä¹é´çæµ®ç¹æ°ï¼å°±å¯ä»¥éè¿æ£å表达å¼"[3-4].\d+"æ¥ä½¿ä¸¤ä¸ªé½æ»¡è¶³ã
æ°æ®æ´ç
ä¸è¬èè¨ï¼ç¬ä¸æ¥çåå§æ°æ®é½ä¸æ¯æ¸ æ´çï¼æ以å¨å ¥åºåè¦å æ´çï¼ç±äºå¤§é¨åé½æ¯å符串ï¼æ以主è¦ä¹å°±æ¯å符串çå¤çæ¹å¼äºã
å符串èªå¸¦çæ¹æ³å¯ä»¥æ»¡è¶³å¤§é¨åç®åçå¤çéæ±ï¼æ¯å¦stripå¯ä»¥å»æé¦å°¾ä¸éè¦çå符æè æ¢è¡ç¬¦çï¼replaceå¯ä»¥å°æå®é¨åæ¿æ¢æéè¦çé¨åï¼splitå¯ä»¥å¨æå®é¨ååå²ç¶åæªåä¸é¨åã
å¦æå符串å¤ççéæ±å¤ªå¤æ以è´å¸¸è§çå符串å¤çæ¹æ³ä¸å¥½è§£å³ï¼é£å°±è¦è¯·åºæ£å表达å¼è¿ä¸ªå¤§æå¨ã
Pandasæ¯Pythonä¸å¸¸ç¨çæ°æ®å¤ç模åï¼è½ç¶ä½ä¸ºä¸ä¸ªä»R转è¿æ¥ç人ä¸ç´è§å¾è¿ä¸ªæ¨¡ä»¿Rçå å®å¨æ¯å¤ªé¾ç¨äºãPandasä¸ä» å¯ä»¥è¿è¡åéåå¤çãçéãåç»ã计ç®ï¼è¿è½å¤æ´åæDataFrameï¼å°ééçæ°æ®æ´åæä¸å¼ 表ï¼åç°æç»çåå¨ææã
åå ¥æ°æ®åº
å¦æåªæ¯ä¸å°è§æ¨¡çç¬è«ï¼å¯ä»¥ææåçç¬è«ç»ææ±åæä¸å¼ 表ï¼æå导åºæä¸å¼ è¡¨æ ¼ä»¥ä¾¿åç»ä½¿ç¨ï¼ä½å¯¹äºè¡¨æ°éå¤ãåå¼ è¡¨å®¹é大ç大è§æ¨¡ç¬è«ï¼å导åºæä¸å é¶æ£ç表就ä¸åéäºï¼è¯å®è¿æ¯è¦æ¾å¨æ°æ®åºä¸ï¼æ¢æ¹ä¾¿åå¨ï¼ä¹æ¹ä¾¿è¿ä¸æ¥æ´çã
åå ¥æ°æ®åºæ两ç§æ¹æ³ï¼ä¸ç§æ¯éè¿PandasçDataFrameèªå¸¦çto_sqlæ¹æ³ï¼å¥½å¤æ¯èªå¨å»ºè¡¨ï¼å¯¹äºå¯¹è¡¨ç»æ没æä¸¥æ ¼è¦æ±çæ åµä¸å¯ä»¥éç¨è¿ç§æ¹å¼ï¼ä¸è¿å¼å¾ä¸æçæ¯ï¼å¦ææ¯å¤è¡çDataFrameå¯ä»¥ç´æ¥æå ¥ä¸å ç´¢å¼ï¼ä½è¥åªæä¸è¡å°±è¦å ç´¢å¼å¦åæ¥éï¼è½ç¶è¿ä¸ªè®¤ä¸ºä¸å¤ªåçï¼å¦ä¸ç§æ¯å©ç¨æ°æ®åºå¼ææ¥æ§è¡SQLè¯å¥ï¼è¿ç§æ åµä¸è¦å èªå·±å»ºè¡¨ï¼è½ç¶å¤äºä¸æ¥ï¼ä½æ¯è¡¨ç»æå®å ¨æ¯èªå·±æ§å¶ä¹ä¸ãPandasä¸SQLé½å¯ä»¥ç¨æ¥å»ºè¡¨ãæ´çæ°æ®ï¼ç»åèµ·æ¥ä½¿ç¨æçæ´é«ã
手把手教你搭建自己的量化分析数据库
量化交易的分析根基在于数据,包括股票历史交易数据、上市公司基本面数据、宏观和行业数据等。面对信息流量的持续增长,掌握如何获取、查询和处理数据信息变得不可或缺。对于涉足量化交易的个体而言,对数据库操作的labview语音识别源码掌握更是基本技能。目前,MySQL、Postgresql、Mongodb、SQLite等开源数据库因其高使用量和受欢迎程度,位列-年DB-Engines排行榜前十。这几个数据库各有特点和适用场景。本文以Python操作Postgresql数据库为例,借助psycopg2和sqlalchemy实现与pandas dataframe的交互,一步步构建个人量化分析数据库。
首先,安装PostgreSQL。通过其官网下载适合操作系统的版本,按照默认设置完成安装。安装完成后,可以在安装目录中找到pgAdmin4,这是一个图形化工具,用于查看和管理PostgreSQL数据库,其最新版为Web应用程序。
接着,利用Python安装psycopg2和sqlalchemy库。psycopg2是连接PostgreSQL数据库的接口,sqlalchemy则适用于多种数据库,特别是与pandas dataframe的交互更为便捷。通过pip安装这两个库即可。
实践操作中,使用tushare获取股票行情数据并保存至本地PostgreSQL数据库。网站模板带源码通过psycopg2和sqlalchemy接口,实现数据的存储和管理。由于数据量庞大,通常分阶段下载,比如先下载特定时间段的数据,后续不断更新。
构建数据查询和可视化函数,用于分析和展示股价变化。比如查询股价日涨幅超过9.5%或跌幅超过-9.5%的个股数据分布,结合选股策略进行数据查询和提取。此外,使用日均线策略,开发数据查询和可视化函数,对选出的股票进行日K线、日均线、成交量、买入和卖出信号的可视化分析。
数据库操作涉及众多内容,本文着重介绍使用Python与PostgreSQL数据库的交互方式,逐步搭建个人量化分析数据库。虽然文中使用的数据量仅为百万条左右,使用Excel的csv文件读写速度较快且直观,但随着数据量的增长,建立完善的量化分析系统时,数据库学习变得尤为重要。重要的是,文中所展示的汉字笔顺字帖源码选股方式和股票代码仅作为示例应用,不构成任何投资建议。
对于Python金融量化感兴趣的读者,可以关注Python金融量化领域,通过知识星球获取更多资源,包括量化投资视频资料、公众号文章源码、量化投资分析框架,与博主直接交流,结识圈内朋友。
tushare的接口怎么样使用?
Tushare简介
Tushare金融大数据开放社区,免费提供各类金融数据和区块链数据,助力智能投资与创新型投资。网址:https://tushare.pro/register?reg=
注:推广一下分享链接,帮我攒点积分,你好我也好 ^_^ 。
python环境安装
强烈建议使用Anaconda,Anaconda的安装见:https://tushare.pro/document/1?doc_id=
python的IDE我使用vscode,在Anaconda主界面中直接打开vscode,它会帮你设置好环境,简单方便。
tushare库安装
打开vscode的[查看]->[终端],输入 pip install tushare 即可安装tushare。输入 pip install tushare --upgrade 即可更新tushare。缺少或者更新其他python库,参照这个方法即可。
环境安装好后,就可以开工了。直接上代码,建站系统源码社区这份代码从Tushare下载股票列表数据,保存为csv文件,同时保存在mssql数据库中。
注意:在to_sql中的schema参数为数据库名,需要带上该数据库的角色,我使用sa登录,数据库隶属于dbo。使用to_sql不需要创建表,pandas会自动帮你创建好,也不需要自己写插入数据的代码,还是很方便的。如果你在表中增加了主键或者唯一索引,有重复数据时批量入库会失败。tushare本身是有少量重复数据的。采用逐行入库的方式速度会比较慢,需要根据业务自己衡量选择。
#!/usr/bin/python3
# coding:utf-8
# -*- coding: utf-8 -*-
import time
import datetime
import random
import tushare
import pandas
import pymssql
import sqlalchemy
#需修改的参数
stock_list_file = 'stock_list.csv' #股票列表文件csv
#tushare token
tushare_token='你自己的token'
#数据库参数
db_host = '.0.0.1'
db_user = 'sa'
db_password = 'pwd'
db_db = 'quantum'
db_charset = 'utf8'
db_url = 'mssql+pymssql://sa:pwd@.0.0.1:/quantum'
#股票列表
def get_stock_basic() :
print('开始下载股票列表数据')
#获取tushare
pro = tushare.pro_api()
#下载
data = pro.stock_basic(fields='ts_code,symbol,name,fullname,list_status,list_date,delist_date')
#保存到csv文件
data.to_csv(stock_list_file)
#入库
engine = sqlalchemy.create_engine(db_url)
try:
#先一次性入库,异常后逐条入库
pandas.io.sql.to_sql(data, 'stock_basic', engine, schema='quantum.dbo', if_exists='append', index=False)
except :
#逐行入库
print('批量入库异常,开始逐条入库.')
for indexs in data.index :
line = data.iloc[indexs:indexs+1, :]
try:
pandas.io.sql.to_sql(line, 'stock_basic', engine, schema='quantum.dbo', if_exists='append', index=False, chunksize=1)
except:
print('股票列表数据入库异常:')
print(line)
finally:
pass
finally:
pass
print('完成下载股票列表数据')
return 1
#全量下载所有股票列表数据
if __name__ == '__main__':
print('开始...')
#初始化tushare
tushare.set_token(tushare_token)
print('获取股票列表')
get_stock_basic()
print('结束')
FastAPI工具集-SQLAlchemy会话
源码:fastapi_utils.sessions
SQLAlchemy在FastAPI中作为数据库的ORM框架,其使用方法随着社区活跃见解及FastAPI新特性而变化。
fastapi_utils.session模块提供了FastAPI中SQLAlchemy会话管理的合适工具。
FastAPISessionMaker类封装了FastAPI中会话创建功能,用于实例化时读取环境变量中的数据库设置。若环境变量未设置DATABASE_URI,则引发ValidationError。可将database_uri拆分为scheme、username、password、host和db单独字段,通过一个名为database_uri的@property属性构建uri。get_db函数使用上下文管理器依赖项,确保仅在使用会话的端点中创建和关闭会话,避免了基于中间件方法中每个请求处理导致的会话创建和关闭开销。注意get_db依赖项不会在将响应返回给用户之前终结掉ORM会话,可能会导致轻微响应延迟或数据库写入未提交引发错误。在预期数据库写入可能失败的请求中,需手动执行提交并处理错误。基于中间件方法虽然能自动确保数据库错误对用户可见,但可能导致通用的内部服务器错误,需适当地在get_db函数中使用try-except语句块记录清理过程中引发的数据库错误。在FastAPISessionMaker上使用@lru_cache确保相同的FastAPISessionMaker实例在请求中复用,减少开销同时确保实例惰性创建,适用于测试框架以编程方式覆盖环境变量,尤其是测试期间。
ORM如何自己手写一个ORM框架
本文将讨论如何构建一个ORM框架,并以cushy-storage磁盘缓存框架为例进行实现。ORM框架,即对象关系映射框架,允许程序员使用面向对象的方式操作数据库,简化了SQL语言的复杂性和繁琐性。
在Python中,如SQLAlchemy这样的流行ORM框架可以帮助轻松实现数据库的CRUD操作。使用ORM框架,开发者可以像操作本地对象一样操作数据库,从而提高了代码的可读性和维护性。
下面以安装SQLAlchemy为例,展示如何创建数据库表和进行基本操作。首先,通过命令安装SQLAlchemy。接着,定义表结构并执行CRUD操作。示例代码展示了使用ORM框架进行数据库操作的简易性。
编写一个完整的ORM框架需要深入理解数据库、Python编程以及设计模式。若希望深入了解,可参考如Django、SQLAlchemy、Peewee等优秀的开源ORM框架的源代码及文档。
本文将结合cushy-storage的功能,快速构建一个ORM框架,实现对本地文件数据的增删改查。cushy-storage是一个基于磁盘缓存的Python库,简化了数据存储和读取的过程。
实现的主要功能包括:存储、检索、更新和删除自定义对象。通过继承BaseORMModel类,自定义类可以轻松实现ORM功能。CushyOrmCache类继承CushyDict,并结合ORM功能,实现对象级数据的高效管理。
构建QuerySet类,提供更丰富的查询功能,如条件筛选、返回所有数据、返回第一个数据等。最后,通过ORMMixin实现增删改查功能,CushyORMCache类提供完整的ORM框架接口。
使用CushyORMCache,开发者可以方便地进行对象级数据的增删改查操作。下面的示例展示了如何构建用户系统并使用CushyORMCache进行操作。
完整实现代码展示了如何继承BaseORMModel、初始化CushyOrmCache,以及进行基本的增删改查操作。通过传入User对象或表名(如"User")进行数据查询,实现复杂条件查询和批量返回。
本文总结了ORM框架的概念和构建方法,以cushy-storage为依托,构建了一个实用的ORM框架。该框架支持复杂条件查询、批量数据返回等功能,简化了对象级数据的操作。
Python - 一文入门Flask(Blueprint、SQLAlchemy部分)
本文将简要介绍如何入门Flask,包括安装准备、路由实现、Blueprint和SQLAlchemy的实践。首先,从安装Flask和pipenv开始,然后逐步构建项目结构,实现Web路由功能和数据库操作。
在PyCharm的环境配置部分,这里主要关注代码实现,而不是环境设置。在项目实践中,Flask的核心是通过App初始化时绑定Blueprint实现路由。首先,创建一个入口文件,负责实例化App并初始化配置、控制器和数据库。
启动文件中,需要进行判断逻辑的引入,这是为了优化程序运行。Flask路由功能是通过蓝图实现的,需要在入口文件中注册蓝图。每个路由器可以使用装载器优化,如在api文件中的示例所示。
完成路由后,我们转向数据库操作,Flask推荐使用SQLAlchemy处理。安装Flask-SQLAlchemy和PyMySQL,便于与MySQL数据库的交互。定义数据库操作的基类和公共方法,减少代码重复。
在入口文件中,通过SQLALCHEMY_DATABASE_URI配置数据库连接,使用with关键字确保资源的正确管理和释放。在model模块中,定义模型、常量和数据库操作方法,这些在路由中会被使用。
关于SQLAlchemy的Mysql编码和列类型,可能需要进行一些优化,包括默认值、索引设置和兼容不同列类型。Python源码提供了详细的设置指导,例如TinyINT类型和VARCHAR的使用。
最后,自定义数据库名和字符集编码时,可以使用__tablename__和字符集设置。编程中,阅读源码注释和示例可以帮助更好地理解和学习。