Trac SQL Database API

[b]Trac SQL Database API[/b]

Trac uses a very thin layer on top of the standard Python Database API 2.0 for interfacing with supported relational database systems such as SQLite or PostgreSQL.

Note that Trac prior to version 0.9 used the PySQLite APIs directly, and has no support for other database systems. This document describes the thin DB API abstraction layer introduced in version 0.9.

You can find the specifics of the database API in the trac.db package. This package provides:
Simple pooling of database connections
Iterable cursors
Selection of DB modules based of connection URIs.

[b]Accessing the Database[/b]

Code accessing the database in Trac go through this layer simply by using the Environment method get_db_cnx() in order to get a pooled database connection. A database cursor can be obtained from the pooled database connection, and the code uses the cursor in conjunction with SQL statements to implement the behavior.

from trac.env import Environment
def myFunc():
env = Environment('/path/to/projenv')
db = env.get_db_cnx()
cursor = db.cursor()
# Execute some SQL statements
db.commit()
return


Note that you should always make sure that db won't get garbage collected while cursor is still used, as the collection will do a rollback and close the cursors (avoid in particular doing cursor = env.get_db_cnx().cursor(), see r8878).

The get_db_cnx method looks at the value of the database configuration option in trac.ini, which should contain a database connection URI. The default value for this option tells Trac to use an SQLite database inside the environment directory:


[trac]
database = sqlite:db/trac.db


The connection URI syntax has been designed to be compatible with that provided by SQLObject (see also the Wiki page on SQLObject connections). The only supported URI schemes at this point are sqlite and postgres.

[b]Pooled Connections[/b]

The Environment method get_db_cnx() returns a connection from the pool of connections. This connection needs to be returned, and Trac is written so that the return will happen automatically by the garbage collector if the code is written to follow a simple rule. When the garbage collector determines the pooled database connection is no longer being used, it's del method will return the pooled connection to the pool for reuse. If you have set a lexical variable in the function's body to the pooled connection, this typically occurs when the function is returning. In the example above of myFunc it occurs at the return statement since db is a variable local to myFunc

[b]Rules for DB API Usage[/b]

Different DB API modules have different ways to pass parameters to the cursors' execute method, and different ways to access query results. To keep the database API as thin as possible, the Trac team has decided to use a relatively common subset in all database code.

[b]Parameter passing[/b]

Always use the "format" parameter style, and always with %s (because that's the only type that pyPgSQL supports). Statement parameters always need to be passed into execute as an actual sequence (list or tuple).

So the following statements are okay:

cursor.execute("SELECT author,ipnr,comment FROM wiki WHERE name=%s", [thename])
cursor.execute("SELECT id FROM ticket WHERE time>=%s AND time<=%s", (start, stop))


The following uses are not okay:

cursor.execute("SELECT author,ipnr,comment FROM wiki WHERE name=?", thename)
cursor.execute("SELECT id FROM ticket WHERE time>=%i AND time<=%i", start, stop)


At any cost, try avoiding the use of string formatting to get values into the SQL statement. The database automatically escapes values you pass using execute() arguments, the same is not true if you use string formatting, opening your code up to SQL injection attacks.

On the other hand, you must use string formatting to dynamically specify names of tables or columns, i.e. anything that is not a value as such:

cursor.execute("SELECT time FROM %s WHERE name=%%s" % table, (thename,))


[b]Retrieving results[/b]

For convenience, cursors returned by the database connection object are iterable after having executed an SQL query. Individual fields in result rows may only be accessed using integer indices:


cursor.execute("SELECT author,ipnr,comment FROM wiki WHERE name=%s", (thename,))
for row in cursor:
print 'Author: %s (%s)' % (row[0], row[1])
print row[2]


Accessing fields using the column names is not supported by all database modules, so it should not be used. Automatically unpacking rows into tuples of named variables often provides better readability:

cursor.execute("SELECT author,ipnr,comment FROM wiki WHERE name=%s", (thename,))
for author, ipnr, comment in cursor:
print 'Author: %s (%s)' % (author, ipnr)
print comment

[b]Guidelines for SQL Statements[/b]

As you may know, support for SQL varies among different database systems. The requirements of Trac are relatively trivial, so we try to stick to a common subset that is supported by the majority of databases.

TODO: Need content
Redmine替代Trac:多项目协同架构迁移实战 项目管理工具选型本质是数据建模与协作范式的升级。当单体式工具(如Trac)遭遇多客户、多项目、强依赖的现代交付场景,其‘实例堆叠’架构必然导致数据孤岛与配置失焦。Redmine凭借统一内核的多租户设计、Web化工作流引擎和可扩展插件体系,天然支持跨项目语义关联与业务配置民主化。它不追求UI炫技,而以数据库范式驱动的查询能力、细粒度权限继承和稳定REST API,支撑起客户-项目-任务-交付全链路治理。本文基于17年Trac深度定制环境的迁移实践,详解如何在保障历史数据完整性前提下,实现从‘系统运维驱动’到‘ 阅读详情

相关推荐

项目启动不是开始编码,而是搭建交付稳定性之桥

在软件工程中,'项目启动'常被误解为流程起点或行政手续,实则是决定交付质量与节奏的底层奠基阶段。其核心原理在于通过结构化机制降低信息熵、对齐跨角色语义、固化最小可验证认知单元,从而将模糊需求转化为可执行、可追溯、可审计的技术契约。这一过程直接支撑项目Performance——不仅指系统响应性能,更涵盖交付稳定性、需求兑现率与协作确定性等工程效能维度。典型应用场景包括外包技术选型评估、敏捷团队新项目导入、金融/政务等强合规要求系统的交付初始化。本文聚焦Python技术栈下的实操体系,详解Trac中枢建设、Do

java天气 378

Tracbot实现Trac与Slack双向集成实战指南

Trac作为轻量级项目管理工具,长期面临信息孤岛问题;Slack则是现代团队实时协作中枢。要打通二者,需基于XML-RPC接口与Webhook机制构建可控、安全、可定制的中间服务。Tracbot正是这样一款开源Python工具,它不依赖复杂容器环境,支持轮询/事件驱动双模式监听、Jinja2模板化消息渲染、精细化字段过滤及Slack命令反向同步工单状态。其核心价值在于满足中小团队对低资源占用、高安全合规性与强定制能力的工程刚需,适用于金融、政务等对数据主权敏感的场景。

daxi1047的博客 351

FedEx Day:24小时内部创新马拉松实战指南

FedEx Day是一种以时间盒(Time-boxing)为核心、强调自主决策与真实问题解决的内部创新实践,源于敏捷开发中的‘快速交付’思想,并融合了Google ShipIt Day和Plone社区‘Plone Way’的务实哲学。其原理在于通过严格限定24小时周期,强制聚焦最小可行闭环,过滤冗余设计,激发跨职能协作;技术价值体现在显著缩短问题响应周期、暴露组织协作断点、加速技术债清偿;典型应用场景包括开发环境标准化(如Ansible+Jinja2乐高化配置)、文档自动化(Markdown→PDF流水线)

weixin_34151004的博客 399

Trac 经验谈之(2)杂谈篇补遗

Trac 经验谈之(1)杂谈篇Trac 经验谈之(2)杂谈篇补遗Trac 经验谈之(3)工作流篇Trac 经验谈之(4)报表篇Trac 经验谈之(5)插件篇Trac 经验谈之(6 完)插件篇补遗=================Trac 经验谈之(2)杂谈篇补遗 赖勇浩(http://laiyonghao.com) 教训 一定要有模板 嗯,我说的是每一个任务单(ticket)的描述。如果没有一...

tibaloga 229

基于MediaPipe与ROS2的手势控制机械臂:从视觉感知到运动规划实战

机器人感知与控制是机器人学的基础,其核心在于将传感器数据转化为精确的执行指令。计算机视觉作为关键的感知技术,通过识别和理解环境信息,为机器人提供决策依据。MediaPipe作为轻量级、高精度的开源视觉框架,能够实时检测手部关键点,为自然直观的人机交互提供了可能。在机器人领域,ROS2作为标准化的中间件,通过其发布/订阅通信机制和丰富的工具生态,实现了感知、决策与控制模块的高效解耦与集成。结合MoveIt运动规划框架,可以安全、无碰撞地将视觉识别的目标位姿转化为机械臂的关节轨迹。这种技术组合在机器人示教、远程

weixin_33847182的博客 344

trac api调用测试 c#

trac api调用测试 c# trac+testlink测试连接用

HTML5 API详解(17):Web SQL DataBase本地数据库

Web SQL Database是一个已经废弃的规范,但是鉴于除了IE和Firefox,其他浏览器都已经实现了Web SQL Database,并且它还具有一些HTML5...

qq_24520459的博客 479

VS2019中C++动态链接库(DLL)的创建与调用

VS2019中C++动态链接库(DLL)的创建与调用,及一些进阶技巧。

qq_42232522的博客 7563

企业级Web项目六大生存原则:需求追溯、合规审计与持续集成实战

企业级Web系统不是功能堆砌,而是受法规约束、需全程可追溯的工程体系。其核心在于将业务需求、技术实现与合规要求通过结构化机制深度绑定——从需求票的法规条款标注、代码提交的机器可读标识,到自动化CI流水线中的GxP验证脚本,本质是构建一套抗审计、防漂移、可度量的质量免疫系统。这类系统普遍面临FDA/EMA合规压力、多角色协同断层及长周期交付风险,因此必须以Trac+Jenkins+Plone等工具链为载体,落地需求-设计-测试-部署全链路动态追溯。本文聚焦制药行业真实战场,详解如何用六项可执行原则,把‘满足2

weixin_30271335的博客 382

S32K144(1)新建裸机项目以及烧录调试工程

目录 1、简介 2、S32DS新建裸机项目 2.1、新建空的项目 2.2、选择标准库的S32DS 2.3、选择使用EWL官方库 2.4、新建成功 3、烧录工程 3.1、点击Debug,选择Debug Configurations 3.2、新建GDB SEGGER J-Link Debugging 3.3、确认Project和C/C++ Applicants是需要烧写的项目名和路径正确 3.4、确认Executable Device name Interface等各个配置信息正确,后点击

朗朗上口就行啦的博客 4975

STM32F429网络通信避坑指南:用CubeMX搞定LAN8720+LWIP+FreeRTOS(附完整代码)

本文详细介绍了STM32F429通过CubeMX配置LAN8720+LWIP+FreeRTOS实现网络通信的避坑指南,涵盖硬件连接、CubeMX配置、LWIP优化及调试技巧,提供完整代码和实战经验,帮助开发者高效解决以太网通信中的常见问题。

weixin_26873711的博客 145

SpringBoot 3.x + Vue 3 + AI 全栈健身管理系统:毕设实战与工程化指南

在软件开发领域,前后端分离架构已成为构建现代Web应用的主流范式。其核心原理在于将用户界面(前端)与业务逻辑(后端)解耦,通过RESTful API进行数据交互,从而实现关注点分离、提升开发效率和系统可维护性。这种架构的技术价值在于支持团队并行开发、便于技术栈独立演进,并能更好地适应多端(Web、移动端)需求。典型的应用场景包括各类中后台管理系统、电商平台以及企业级应用。本文聚焦于一个融合了前沿AI能力的全栈项目实践,深入探讨如何利用SpringBoot 3.x构建稳健的后端服务,并结合Vue 3与Type

weixin_33841722的博客 516

带隙基准电路实战:温度补偿与流片调优全解析

带隙基准(BGR)是模拟芯片中实现高精度、低温漂电压参考的核心电路,其本质是利用硅材料禁带宽度的物理稳定性,通过PTAT(正温度系数)与CTAT(负温度系数)电压的加权叠加抵消温度影响。原理上需兼顾一阶线性补偿与二阶曲率校正,技术价值在于支撑ADC/DAC/LDO等关键模块的精度与可靠性。典型应用场景涵盖车规级MCU、工业传感器和高精度电源管理芯片。工程落地难点集中于工艺偏差、运放失调、寄生效应及版图热电耦合——这正是‘带隙基准设计’与‘带隙基准调优’的根本分野。本文聚焦真实流片经验,深入拆解Widlar架

weixin_42628280的博客 254

3 分钟免费激活 Windows 11 和 Office,不用产品密钥

右下角"未激活"的水印消失,Word、Excel 打开也不再弹激活提醒。全程靠开源脚本 MAS(Microsoft Activation Scripts)完成,它免费、不需要产品密钥。从粘贴命令到激活完成,3 分钟内搞定。 **一句话说明:MAS 是免费开源脚本,不用密钥就能激活 Windows 和 Office。** ## 开工前:先核对 3 件事 - 条件:Windows 8.1/10/

gitblog_01099的博客 468

别再死记硬背了!用Amesim HCD库亲手搭建单向阀、锥阀、球阀模型(附详细参数设置)

本文详细介绍了如何使用Amesim HCD库从零构建单向阀、锥阀和球阀的仿真模型,帮助工程师摆脱死记硬背,掌握物理建模的核心技巧。通过实战案例和参数设置指南,读者将学会如何优化阀门动态响应、验证流量特性以及处理旋转运动等独特挑战,提升液压系统设计效率。

weixin_29248611的博客 501

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

君逍遥o 809

Hindsight智能体记忆系统:从入门到精通的完整部署指南

Hindsight是一款革命性的智能体记忆系统,它能让ాలుాలుానhets真正ాలుాలు appreeniciation和进化,而hetsyardsాలుenia对话ాల。作为当前最准确的智能体记忆系统,Hindsight在LongMemEval基准测试中实现了最先进的性能表现。本指南将带你从零开始,全面掌握Hindsight的部署与应用,无论你是开发者、架构师还是AI研究者,都能找到适合你

gitblog_01274的博客 1073

基于TKVA与深度学习的量子点微型光谱仪光谱重建改进算法研究

本文提出了一种融合深度学习的改进TKVA算法(TKVA-DL),用于提升量子点微型光谱仪的光谱重建精度。该方法创新性地结合深度先验网络与注意力机制,通过自适应学习光谱隐式先验替代传统固定正则化项,并动态加权探测器响应通道。实验表明,所提方法在仿真和实测数据上均显著优于传统TKVA及主流深度学习算法,RMSE降低35%,PSNR提升4.2 dB,同时保持物理可解释性。完整MATLAB实现验证了方法的有效性与可复现性,为微型光谱仪的高精度重建提供了新思路。 关键词:量子点微型光谱仪;光谱重建;Tikhonov正

AI的内部世界的博客 83

WordPress主题开发终极指南:从零开始打造专属网站的完整教程

想要完全掌控WordPress网站的外观和功能吗?厌倦了千篇一律的预设主题?WordPress主题开发正是你需要的技能。本指南将带你从零开始,逐步掌握创建个性化WordPress主题的核心技术,让你能够打造完全符合品牌需求的专属网站。 WordPress是全球最受欢迎的内容管理系统,其强大的主题系统让网站定制变得简单高效。通过学习主题开发,你不仅可以创建独一无二的网站设计,还能深入了解WordP

gitblog_01013的博客 1057

如何在不牺牲精度的前提下,把 YOLOv11 压缩到 Jetson 能跑的程度

YOLOv11 在目标检测任务中具备较强的准确性与多尺度鲁棒性,但其原始模型参数规模与计算量,对边缘设备来说并不友好,特别是面向 Jetson 这类资源受限的推理平台。本文基于实际部署场景,逐步拆解从结构层级改造、剪枝策略制定、量化导出流程,到 Jetson TensorRT 推理落地全过程。在不牺牲主干精度的前提下,最终实现 YOLOv11 推理延迟缩短 3 倍、模型体积压缩 4 倍、mAP 损失控制在 1% 以内的轻量化优化结果,并总结出一条可复用的工程路径,供工业界与边缘侧模型部署开发者参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2426

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WordPress块绑定技术:实现动态内容与模式覆盖的架构解析

WordPress块绑定技术是自6.5版本引入的核心API,它通过将区块属性与动态数据源解耦连接,实现了内容展示与数据管理的分离。这项技术允许开发者在不修改区块结构的前提下,动态替换内容,为WordPress的编辑体验和内容管理带来了革命性改进。 ## 传统内容管理的痛点与块绑定的解决方案 ### 问题场景:静态内容与动态需求的矛盾 在传统WordPress开发中,开发者面临一个根本性矛盾:

gitblog_01025的博客 738

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

docker 安装和使用

一、centos7 安装docker 1:删除老版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrot...

Bonrui编程路 4842

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Yaml与python类型的对照表

因为常用yaml作为python程序的配置文件,特将其与python类型参照表在此贴出,以供温故之用。     YAML tag Python type Standard YAML tags   !!null None !!bool ...

pythoner的专栏 575

在Mac OS上运行wxPython

如果在一个64位的Mac上跑wxPython, 将会出现以下错误: [code="log"] ImportError: /usr/local/lib/wxPython-unicode-2.8.10.1/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (...

pythoner的专栏 304
上一篇: 通过ContactsContract类获取电话号码的改变
下一篇: 在Mac OS上运行wxPython
pythoner
博客等级 码龄18年 15粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值