标题:一个Django与SQLAlchemy的小项目 出处:运维进行时 时间:Sat, 22 Sep 2007 15:36:58 +0000 作者:root 地址:https://blog.liuts.com/post/92/ 内容: dbconfig.py # -*- coding: utf-8 -*- from django.conf import settings import sqlalchemy from sqlalchemy.engine.url import URL __all__ = ['metadata'] def create_engine(): url = URL(drivername=settings.DATABASE_ENGINE, database=settings.DATABASE_NAME, username=settings.DATABASE_USER, password=settings.DATABASE_PASSWORD, host=settings.DATABASE_HOST, port=settings.DATABASE_PORT or None, query = getattr(settings, 'DATABASE_OPTIONS', {}) ) options = getattr(settings, 'SQLALCHEMY_OPTIONS', {}) engine = sqlalchemy.create_engine(url, **options) return engine metadata = sqlalchemy.MetaData(create_engine()) urls.py from django.conf.urls.defaults import * urlpatterns = patterns('servperf.serlist.views', (r'^list/(?P(\d|\.){10,15})?$', 'Readlist'), (r'^list/?$', 'Readlist',{'list_type': 'listall'}), (r'^diskio/?$', 'Readlist', {'list_type': 'diskio_data'}), (r'^diskspace/$', 'Readlist', {'list_type': 'diskspace_data'}), (r'^loadavg/$', 'Readlist', {'list_type': 'loadavg_data'}), (r'^mem/$', 'Readlist', {'list_type': 'mem_data'}), (r'^net/$', 'Readlist', {'list_type':'net_data'}), # Uncomment this for admin:, {'list_type': 'net'} (r'^admin/', include('django.contrib.admin.urls')), ) models.py # Create your models here. from sqlalchemy import * from servperf.dbconfig import metadata diskio_data = Table('diskio_data', metadata, Column('ID', Integer, primary_key=True), Column('LAN', char(15), nullable=False), Column('WAN', char(15), nullable=False), Column('CONTENTS', varchar(225), nullable=False), Column('DATETIME', datetime, nullable=False), mysql_engine='InnoDB' views.py #coding=utf-8 # Create your views here. from sqlalchemy import * from sqlalchemy.sql import and_ from servperf.dbconfig import metadata from servperf.serlist.models import diskio_data,loadavg_data,diskspace_data,mem_data,net_data from django.shortcuts import render_to_response def Readlist(request,list_type="listall"): pagesize = 6 page = request.GET.get('page', None) _sqlc=[] _sqllist=[diskio_data.c.DATETIME==diskspace_data.c.DATETIME \ ,diskio_data.c.DATETIME==loadavg_data.c.DATETIME \ ,diskio_data.c.DATETIME==mem_data.c.DATETIME \ ,diskio_data.c.DATETIME==net_data.c.DATETIME \ ,diskio_data.c.WAN==diskspace_data.c.WAN \ ,diskio_data.c.WAN==loadavg_data.c.WAN \ ,diskio_data.c.WAN==mem_data.c.WAN \ ,diskio_data.c.WAN==net_data.c.WAN \ ] if len(str(list_type))>10: _sqlc.append(diskio_data.c.WAN==list_type) _sqllist.append(diskio_data.c.WAN==list_type) _sqllist.append(diskspace_data.c.WAN==list_type) _sqllist.append(loadavg_data.c.WAN==list_type) _sqllist.append(mem_data.c.WAN==list_type) _sqllist.append(net_data.c.WAN==list_type) _rscount= select([func.count(diskio_data.c.LAN)], and_(*_sqlc)).execute() numrows = int(_rscount.fetchone()[0]) pages=numrows / pagesize if numrows % pagesize: pages+=1 if page==None: page=1 offset=pagesize*(int(page)-1) previous=int(page)-1 next=int(page)+1 if next>pages: next=pages s= select([diskio_data.c.LAN,diskio_data.c.WAN,diskio_data.c.CONTENTS,loadavg_data.c.CONTENTS, \ diskspace_data.c.CONTENTS,mem_data.c.CONTENTS,net_data.c.CONTENTS,diskio_data.c.DATETIME], \ and_( *_sqllist )).order_by(diskio_data.c.DATETIME.desc()).offset(offset).limit(pagesize) rs = s.execute() row = rs.fetchall() rs.close() return render_to_response('serlist/serlist_list.html',{'myrows':row,'page':page,'pages':pages,'previous':previous,'next':next,'numrows':numrows,'list_type':list_type}) Generated by Bo-blog 2.1.1 Release