基于多操作系统的文本数据库,带有Python和JavaScript引擎
Multi-OS text-based database with an engine for Python and JavaScript
这可能是一个远取,但也许有人知道一个很好的解决方案。
我目前正在用新的wxPython 2.9做一个Python应用程序,它有新的html2
库,它将继承每个操作系统的本机浏览器(Safari/IE/Firefox/Konquerer/~),这真的很棒。
目标/目的
我目前的目标是处理大块数据并使用Python超快地分析它(目前大约有110,000个条目,在字典中产生大约1,500,000到2,250,000个结果)。这个工作非常快,也是动态的,所以它只会做第一次大的读取一次(大约只需要2-4秒),然后继续监听,如果新的数据被创建在磁盘上。
到目前为止,一切顺利。现在使用新的wxPython html2
库,我正在制作新的GUI。它主要是用来显示页面的,所以我现在所做的是一个模型在/html/
文件夹(HTML/CSS/jQuery),它会动态地寻找一个JSON文件(jQuery抓取),这实际上是一个完整的转储的大量字典,Python脚本是在后台(守护进程)在并行线程。
JavaScript在读取一个大的JSON文件时似乎没有问题,因为一切都是(并保持)本地的,所以它并没有真正引起缓慢或任何问题。此外,CPU和内存使用率非常低。
结论但是瓶颈来了。从JavaScript的角度来看,处理大JSON文件并不是一件轻松的事情。我必须为我需要得到的所有数据做大量的搜索和匹配,并且还在相同的大块条目中创建了大量冗余的重新循环。
我想知道是否有任何一种"引擎"是为Python和JavaScript实现的,可以处理jSON文件,或者其他基于文本的文件作为数据库。这意味着你可以真正拥有一个类似mysql的结构(当然不是指完全扩展),你至少可以定义一个表结构来保存数据,并且你可以有条不紊地进行读/写/更新。
我目前正在开发的应用程序是基于多操作系统的(至少Ubuntu, OS X和Windows XP+)。我也真的不想创建比使用wxPython(为了发行版/依赖)使用扩展数据库(就像我可以在本地主机上运行MySQL服务器)更混乱的东西,所以纯粹把它放在我的Python发行版的文件夹里。这也是为了防止编写大量代码(检查),检查用户是否已经使用服务器/数据库,这可能会与我的应用程序发生冲突,然后我将安装。
最后指出
我的目标是为未来的项目自己构建某种API,以便为需要GUI的Python脚本制定这种开发标准。既然wxPython可以更容易地接受现代浏览器技术;构建超级快速、动态和响应迅速的图形化Python应用程序似乎没有任何限制。
为什么不把数据粘贴到SQLite数据库中,然后让Python和Javascript都命中?参见在Python中将JSON转换为SQLite -如何正确地将JSON键映射到数据库列?
Sqlite包含在所有现代版本的Python中。您必须查看SQLite网站以了解其局限性
通过运行CGI HTTP服务器并让Python在那里为JavaScript的AJAX调用获取SQLite查询,我弄明白了一些事情。下面是一个小演示(仅在OS X上测试):
文件夹结构
main.py
cgi/index.py
data/
html/index.html
html/scripts/jquery.js
html/scripts/main.js
html/styles/main.css
Python server (main.py)
### CGI Server ###
import CGIHTTPServer
import BaseHTTPServer
class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
cgi_directories = ['/cgi']
# Mute the messages in the shell
def log_message(self, format, *args):
return
httpd = BaseHTTPServer.HTTPServer(('', 61350), Handler)
#httpd.serve_forever()
thread = threading.Thread(name='CGIHTTPServer', target=httpd.serve_forever)
thread.setDaemon(True)
thread.start()
#### TEST SQLLite ####
# Make the database file if it doesn't exist
if not os.path.exists('data/sqlite.db'):
db_file = open('data/sqlite.db', 'w')
db_file.write('')
db_file.close()
import sqlite3
conn = sqlite3.connect('data/sqlite.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE info(id INTEGER UNIQUE PRIMARY KEY, name VARCHAR(75), folder_name VARCHAR(75))')
cursor.execute('INSERT INTO info VALUES(null, "something1", "something1_name")')
cursor.execute('INSERT INTO info VALUES(null, "something2", "something1_name")')
conn.commit()
Python SQLite处理器(cgi/index.py)(演示是纯粹的SELECT,需要更多的动态)
#!/usr/bin/env python
import cgi
import json
import sqlite3
print 'Content-Type: text/json'n'n'
### Fetch GET-data ###
form = cgi.FieldStorage()
obj = {}
### SQLite fetching ###
query = form.getvalue('query', 'ERROR')
output = ''
if query == 'ERROR':
output = 'WARNING! No query was given!'
else:
# WARNING: The path probably needs `../data/sqlite.db` if PYTHONPATH is not defined
conn = sqlite3.connect('data/sqlite.db')
cursor = conn.cursor()
cursor.execute(query)
# TODO: Add functionality/detect if it's a SELECT, INSERT/UPDATE (then we need to conn.commit() )
result = cursor.fetchall()
if len(result) > 0:
output = []
for row in result:
buff = []
for entry in row:
buff.append(entry)
output.append(buff)
else:
output = 'WARNING! No results found'
obj = output
### Return the data in jSON (map) format for JavaScript
print json.dumps(obj)
JavaScript (html/脚本/main.js)
'use strict';
$(document).ready(function() {
// JSON data read test
var query = 'SELECT * FROM test';
$.ajax({
url: 'http://127.0.0.1:61350/cgi/index.py?query=' + query,
success: function(data) {
lg(data);
},
error: function() {
lg('Something went wrong while fetching the query.');
}
});
});
这就结束了。浏览器中的控制台输出为;
[
[1, "something1", "something1_name"],
[2, "something2", "something2_name"]
]
使用这种方法,您可以让Python和JavaScript在同一个数据库中读写,而Python继续执行其系统任务(守护进程)并更新数据库条目,而JavaScript可以继续检查新数据。
此方法还可能为侦听器和两者之间的其他通信方式增加空间。
由于守护进程的原因,main.py
将立即停止运行。这是因为我的wxPython脚本在它之后保持守护进程(服务器)活动,直到应用程序停止。如果将来有人想要使用这个代码;只需确保服务器代码在SQLite初始化之后运行,并取消引用httpd.serve_forever()
以保持其运行。
- 为什么在python中使用异常比javascript更容易接受
- 如何访问Web2py'中python代码中的JavaScript变量;s视图
- 调用Javascript中的Python函数,读取静态文件(Flask)
- 如何使用Python/Selenium网络驱动程序处理Angularjs/Javascript下拉列表
- 如何在新创建的模块中从Odoo v8中的Javascript文件中调用python函数
- 创建一个html表单并使用javascript访问中的python脚本
- 当Python在Javascript中发送时,值将转换为UNICODE
- 将dicts数组从python传递到Javascript
- python到javascript正则表达式
- Python Javascript哈希库,以确保JSON对象在传输过程中不会损坏
- Python javascript builder
- Python/JavaScript/HTML 动态创建计算机网络图
- Selenium - Python - Javascript 下拉菜单选项值
- 自动调优/ Python / Javascript
- Selenium Python Javascript Execution
- Selenium python javascript弹出窗口
- Selenium RC / Python / JavaScript .aspx /循环语句
- Python/Javascript数字精度
- Python - JavaScript 网页抓取与硒不能正常工作
- Python/Javascript/AJAX 实时搜索帮助