python एमएस बाहरी डेटाबेस क्वेरी को बनाने के लिए कैसे करें?



डेटाबेस मैनेजमेंट सॉफ्टवेयर (2)

पायथन में एक एसक्यूएल क्वेरी के परिणाम पर पुनरावृति करने के लिए, cursor.fetchall() का प्रयोग करें सूची की सूची में इसे चालू करें। उन परिणामों को ऐसे ऑब्जेक्ट में बदलने के लिए यहां बहुत आसान नुस्खा है जो आप आसानी से एक्सेस कर सकते हैं:

class SQLRow(object):
    def __init__(self, cursor, row):
        for (attr, val) in zip((d[0] for d in cursor.description), row) :
            setattr(self, attr, val)

एक बार जब आप उस कक्षा में होते हैं, तो यह आसान है:

def cdr_user(request):
    cursor = connections['cdr'].cursor()
    calls = cursor.execute('SELECT * FROM cdr')
    result = [SQLRow(cursor, r) for r in cursor.fetchall()]
    return render_to_response("cdr_user.html",
            {'result': result }, context_instance=RequestContext(request))

इस तरह, billsec विशेषता (और अन्य सभी विशेषताओं) अभी भी आपके टेम्पलेट में पहुंच योग्य होंगे।

मेरे पास निम्न कोड है:

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'tectcom',                     
        'USER': 'test',                    
        'PASSWORD': '***146***',                 
        'HOST': '',                     
        'PORT': '',                      
    },

    'cdr': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ast',                     
        'USER': '123',                      
        'PASSWORD': '654',                 
        'HOST': '',                      
        'PORT': '',                     
    }

views.py

def cdr_user(request):
        cursor = connections['cdr'].cursor()
        calls = cursor.execute('SELECT * FROM cdr')
        return render_to_response("cdr_user.html",
                {'result':calls }, context_instance=RequestContext(request))

cdr_user.html

{% for res in result %}

{{ res.billsec }}<br />

{% endfor %}

तालिका उस तरह है:

+-------------+--------------+------+-----+---------------------+-------+
| Field       | Type         | Null | Key | Default             | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| calldate    | datetime     | NO   | MUL | 0000-00-00 00:00:00 |       | 
| clid        | varchar(80)  | NO   |     |                     |       | 
| src         | varchar(80)  | NO   |     |                     |       | 
| dst         | varchar(80)  | NO   | MUL |                     |       | 
| dcontext    | varchar(80)  | NO   |     |                     |       | 
| channel     | varchar(80)  | NO   |     |                     |       | 
| dstchannel  | varchar(80)  | NO   |     |                     |       | 
| lastapp     | varchar(80)  | NO   |     |                     |       | 
| lastdata    | varchar(80)  | NO   |     |                     |       | 
| duration    | int(11)      | NO   |     | 0                   |       | 
| billsec     | int(11)      | NO   |     | 0                   |       | 
| disposition | varchar(45)  | NO   |     |                     |       | 
| amaflags    | int(11)      | NO   |     | 0                   |       | 
| accountcode | varchar(20)  | NO   | MUL |                     |       | 
| userfield   | varchar(255) | NO   |     |                     |       | 
| uniqueid    | varchar(32)  | NO   |     |                     |       | 
| linkedid    | varchar(32)  | NO   |     |                     |       | 
| sequence    | varchar(32)  | NO   |     |                     |       | 
| peeraccount | varchar(32)  | NO   |     |                     |       | 
+-------------+--------------+------+-----+---------------------+-------+

समस्या यह है कि मुझे "अपवाद मूल्य: 'लंबा' ऑब्जेक्ट प्राप्त नहीं किया जा सकता है '

TypeError at /cdr_user/
'long' object is not iterable
Request Method: GET
Request URL:    http://localhost:8000/cdr_user/
Django Version: 1.4.1
Exception Type: TypeError
Exception Value:    
'long' object is not iterable
Exception Location: /usr/local/lib/python2.7/site-packages/django/template/defaulttags.py in render, line 144
Python Executable:  /usr/local/bin/python
Python Version: 2.7.0
Python Path:    
['/home/tectadmin/cdr/billing',
 '/usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
 '/usr/local/lib/python2.7/site-packages/pip-1.0-py2.7.egg',
 '/usr/local/lib/python2.7/site-packages/django_endless_pagination-1.1-py2.7.egg',
 '/usr/local/lib/python27.zip',
 '/usr/local/lib/python2.7',
 '/usr/local/lib/python2.7/plat-linux2',
 '/usr/local/lib/python2.7/lib-tk',
 '/usr/local/lib/python2.7/lib-old',
 '/usr/local/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/site-packages']
Server time:    Sab, 1 Set 2012 19:56:10 -0300
Error during template rendering

In template /home/tectadmin/cdr/billing/config/templates/cdr_user.html, error at line 21
'long' object is not iterable
11    text-indent: 6em;
12  }
13  </style>
14  {% extends "index_cliente.html" %}
15  {% load endless %}
16  {% block title %}CDR{% endblock %}
17  {% block content %}
18  
19  
20  
21  {% for res in result %}
22  
23  {{ res.billsec }}<br />
24  
25  {% endfor %}
26  
27  
28  
29  
30  <br />
31  <form name="input" action="/user_cdr/" method="et" >
Traceback Switch to copy-and-paste view

/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
                        response = callback(request, *callback_args, **callback_kwargs) ...
 Local vars
/home/tectadmin/cdr/billing/config/views.py in cdr_user
                {'result':result }, context_instance=RequestContext(request)) ...
 Local vars

मैं अपने टेम्पलेट में इसे दिखाने के लिए परिणाम कैसे बनाऊँ? मैंने https://docs.djangoproject.com/en/dev/topics/db/sql/ और अन्य दस्तावेजों को देखा है, लेकिन मैं अभी भी कोड में खो गया हूं।

धन्यवाद।


Answer #1

cursor.execute() एक पुनरावृत्त नहीं लौटाता। यह जगह कर्सर ऑब्जेक्ट को संशोधित करता है। इस पर कुछ दस्तावेज यहां दिए गए हैं।

आपको .fetchone() .fetchmany() या .fetchall() को कॉल करने की ज़रूरत है, परिणाम को पुन: प्राप्त करने के लिए, जो इसे सक्षम होना चाहिए, जैसे:

def cdr_user(request):
  cursor = connections['cdr'].cursor()
  cursor.execute('SELECT * FROM cdr')
  calls = cursor.fetchall()
  return render_to_response("cdr_user.html",
                            {'result':calls }, 
                            context_instance=RequestContext(request))




django-views