我之前没有使用psycopg2,但我正在尝试将光标工厂更改为DictCursor,以便fetchall或fetchone将返回字典而不是列表.
我创建了一个测试脚本,使事情变得简单,只测试这个功能.这是我觉得应该工作的一点代码
import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=%s user=%s password=%s" % (DATABASE, USERNAME, PASSWORD))
cur = conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
cur.execute("SELECT * from review")
res = cur.fetchall()
print type(res)
print res
Run Code Online (Sandbox Code Playgroud)
res变量总是一个列表,而不是我期望的字典.
我实现的当前解决方法是使用此函数来构建字典并运行fetchall通过它返回的每一行.
def build_dict(cursor, row):
x = {}
for key,col in enumerate(cursor.description):
x[col[0]] = row[key]
return d
Run Code Online (Sandbox Code Playgroud)
Python是版本2.6.7,psycopg2是版本2.4.2.
我正在编写一些代码来使用 BigIP::iControl 模块查询 F5 负载均衡器。
现在,当我对从特定函数返回的变量执行转储器时,我得到以下输出。
我在迭代这个对象时遇到了很多麻烦。
我怎样才能迭代这个并只取出每个成员的monitor_status?
$VAR1 = [
bless( [
bless( {
'monitor_status' => 'MONITOR_STATUS_UP',
'member' => bless( {
'address' => '127.0.0.0.1',
'port' => '8085'
}, 'Common::IPPortDefinition' )
}, 'LocalLB::PoolMember::MemberMonitorStatus' ),
bless( {
'monitor_status' => 'MONITOR_STATUS_UP',
'member' => bless( {
'address' => '127.0.0.0.1',
'port' => '8085'
}, 'Common::IPPortDefinition' )
}, 'LocalLB::PoolMember::MemberMonitorStatus' ),
bless( {
'monitor_status' => 'MONITOR_STATUS_DOWN',
'member' => bless( {
'address' => '127.0.0.0.1',
'port' => '8085'
}, 'Common::IPPortDefinition' )
}, 'LocalLB::PoolMember::MemberMonitorStatus' ),
bless( {
'monitor_status' => …Run Code Online (Sandbox Code Playgroud) 我的模型文件中有以下类
class HardwareNode(models.Model):
ip_address = models.CharField(max_length=15)
port = models.IntegerField()
location = models.CharField(max_length=50)
hostname = models.CharField(max_length=30)
def __unicode__(self):
return self.hostname
class Subscription(models.Model):
customer = models.ForeignKey(Customer)
package = models.ForeignKey(Package)
location = models.ForeignKey(HardwareNode)
renewal_date = models.DateTimeField('renewal date')
def __unicode__(self):
x = '%s %s' % (self.customer.hostname, str(self.package))
return x
Run Code Online (Sandbox Code Playgroud)
我想计算特定HardwareNode上的订阅数量,并在管理部分显示HardwareNode类,例如节点2上托管的10个订阅.
我还在学习Django,我不知道我会在哪里完成这个.我可以/应该在models.py或HTML中执行此操作吗?
谢谢,
-seth
编辑
我通过分叉进程而不是使用线程解决了这个问题.从评论中的评论和链接,我不认为线程是正确的举动.
谢谢大家的帮助.
完成编辑
我之前没有做太多线程.我已经创建了一些简单的示例"Hello World"脚本,但实际上没有任何工作.
为了帮助我掌握它,我使用Nagios中的二进制文件编写了一个简单的脚本来查询HTTP等服务.如果我有10个服务超时,则此脚本可以正常工作,但超时为1秒,脚本将花费超过10秒的时间.
我想要做的是彼此并行运行所有检查.这应该减少完成所需的时间.
我目前正在收到段错误,但不是所有时间.奇怪的是,我在processCheck函数中检查主机,我可以打印出所有主机.在检查主机之后,hosts变量仅打印集合中的一个或两个主机.我觉得这是命名空间问题,但我不确定如何解决.
我在这里发布了整个代码没有MySQL数据库,但是他的service_list视图的结果看起来像.
非常感谢任何帮助.
6543L, 'moretesting.com', 'smtp')
(6543L, 'moretesting.com', 'ping')
(6543L, 'moretesting.com', 'http')
from commands import getstatusoutput
import MySQLdb
import threading
import Queue
import time
def checkHost(x, service):
command = {}
command['http'] = './plugins/check_http -t 1 -H '
command['smtp'] = './plugins/check_smtp -t 1 -H '
cmd = command[service]
cmd += x
retval = getstatusoutput(cmd)
if retval[0] == 0:
return 0
else:
return retval[1]
def fetchHosts():
hostList = []
cur.execute('SELECT veid, hostname, service from …Run Code Online (Sandbox Code Playgroud)