对XML文档运行SQL语句

askxml的Python项目详细描述


askxml

对XML文档运行SQL语句

<xml><fruitcolor='green'>tasty kiwi</fruit><fruitcolor='dark green'>old kiwi</fruit><fruitcolor='green'>apple</fruit></xml>
>>>fromaskxmlimportAskXML>>>conn=AskXML('file.xml')# get an SQL cursor object>>>c=conn.cursor()>>>results=c.execute("SELECT color FROM fruit WHERE _text LIKE '% kiwi'")>>>forrowinresults.fetchall():>>>print(row)[('green'),('dark green')]# cleanup>>>c.close()>>>conn.close()

但为什么呢?

有类似堆栈交换的数据转储,存储在XML中。它们很大,所以不需要把它们全部放进记忆中。使用askxml,您可以快速而舒适地查询事物(前提是您知道sql)。

在进一步讨论之前,很有可能使用xpath和elementtree xml api来完成您的任务,因此如果您还没有听说过,请查看一下。

安装

一个PIP包在路上。

用法

添加索引和定义列

如果要添加索引、列或设置属性类型,可以传递表定义列表:

fromaskxmlimport*tables=[Table('fruit',Column('age',Integer()),Index('age'))]withAskXML('file.xml',table_definitions=tables)asconn:c=conn.cursor()c.execute("UPDATE fruit SET age = 5 WHERE _text = 'tasty kiwi'")c.close()

不需要定义所有现有的列或表。如果找不到定义,则默认情况下创建该定义时所有列类型都是文本。

节点层次结构

如果要按属性查找另一个节点的子节点:

<xml><someParentname='Jerry'><someChildname='Morty'/><someChildname='Summer'/></someParent></xml>
fromaskxmlimport*withAskXML('file.xml')asconn:c=conn.cursor()results=c.execute("""        SELECT name FROM someParent_someChild as child        INNER JOIN someParent as parent ON parent._id = child._parentId        WHERE parent.name = 'Jerry'    """)forrowinresults.fetchall():print(row)c.close()

这将打印[('Morty'), ('Summer')]

插入新数据

如果要添加新标记:

cursor.execute("INSERT INTO fruit (color, _text) VALUES ('red', 'strawberry')")

或者如果节点具有层次结构:

cursor.execute("INSERT INTO someParent_someChild (name, _parentId) VALUES ('a baby', 1)")

许可证

askxml是根据MIT license

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Android上的可访问文件夹中创建文件?(非根)   tomcat Unix脚本未使用Process Runtime在Java中运行   模拟器中的java Android AudioTrack速度异常   java是否创建具有特定@ConditionalOnProperty的注释?   java如何使用json数据从gridview中的URL加载图像?(类别和子类别)   ConcurrentHashMap的java锁定值对象   如何在具有额外属性的Java枚举上执行Javadoc?   java如何修复SocketException连接重置问题?   无附加表的java JPA实体继承   java Android应用程序在启动屏幕后崩溃   java如何将Arraylist保存到文件?   java restTemplate从restfull Web服务获取文件数组   java活动带布局隐藏导航栏   socket未接收任何内容的java BufferedReader