数据库就主要说下sqlalchemy和elixir吧,其实我也没怎么学,就是之前在研究一个工程型代码的时候学习了点,然后就拿来直接用了。
先介绍下elixir:
官方的文档:http://elixir.ematia.de/trac/wiki/TutorialDivingIn
elixir主要就是用来封装sqlalchemy的ORM模块的(个人的见解)
代码:
数据库中的表有:FetionUsers, ProvincesMap,CitiesMap,sendInfo四个表
FetionUsers就是用来存用户信息的
ProvincesMap存省份名对应的字典,同理CitiesMap也是
sendInfo存你发送的信息
日志文件没有弄
'''
Created on 2012-3-16
@author: xkey
'''
from elixir import *
class FetionUsers(Entity):
using_options(tablename = 'FetionUsers',autoload = True)
provinceUser = ManyToOne('ProvincesMap')
cityUser = ManyToOne('CitiesMap')
class ProvincesMap(Entity):
using_options(tablename = 'ProvincesMap',autoload = True)
fetionUser = OneToMany('FetionUsers')
class CitiesMap(Entity):
using_options(tablename = 'CitiesMap',autoload = True)
fetionUser = OneToMany('FetionUsers')
class SendMsg(Entity):
using_options(tablename = 'sendInfo',autoload = True)
setup_all()
def ExecuteQuery(table,**kwargs):#查询一个表(table),**kwargs就是限制语句
try:
result = table.query.filter_by(kwargs).all()
session.commit()
return result
except Exception,e:
print e
def InsertRecords(table,**kwargs):#插入一条记录
t = table(**kwargs)
session.commit()
session.close()
return 1
def RemoveRecords(table,**kwargs):#删除一条记录
try:
t = table.query.filter_by(**kwargs).all()
for item in t:
session.delete(item)
except Exception, e:
print "No relation records"
return 0
session.commit()
session.close()
return 1
它起到一个承上启下的作用,承上当然就是连接数据库,启下就是调用elixir去实现对数据库的各种操作
sqlalchemy学习网址有很多
推荐两个学习网址:
http://www.rmunn.com/sqlalchemy-tutorial/tutorial.html
http://mapfish.org/doc/tutorials/sqlalchemy.html
下面给出代码:代码简单易懂
#-*-coding:utf-8-*-
from elixir import *
import os,datetime,sys
from sqlalchemy.orm import sessionmaker
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
class DbOper:
def __init__(self,dbConString):
self.__dbConString = dbConString
if(self._setupDatabase() < 1):#连接数据库
print "DataBase Initialize error"
def insertPrivinceMap(self):
provinceMap =\
{
"安徽":'AAH',"北京":'ABJ',"福建":'AFJ',"甘肃":'AGS',"广东":'AGD',\
"广西":'AGX',"贵州":'AGZ',"海南":'AHI',"河北":'AHE',"河南":'AHA',\
"黑龙江":'AHL',"湖南":'AHN',"湖北":'AHB',"吉林":'AJL','江苏':'AJS',\
"江西":'AJX','辽宁':'ALN','内蒙':'AMN','宁夏':'ANX','青海':'AQH',\
'山东':'ASD','山西':'ASX','陕西':'ASN','上海':'ASH','四川':'ASC',\
'台湾':'ATW','天津':'ATJ','西藏':'AXZ','新疆':'AXJ','云南':'AYN',\
'浙江':'AZJ','重庆':'ACQ','香港':'AXG','澳门':'AAM'
}
for key in provinceMap.keys():
value = provinceMap[key]
self.__db.InsertRecords(self.__db.ProvincesMap,realname = unicode(key),imagename = value)
self.__db.session.commit()
self.__db.session.close()
def insertCityMap(self):
cityMap = {'杭州':'hangzhou','滁州':'chuzhou','北京':'beijing'}
for key in cityMap.keys():
value = cityMap[key]
self.__db.InsertRecords(self.__db.CitiesMap,realname = unicode(key),imagename = value)
self.__db.session.commit()
self.__db.session.close()
def insertFetionUsers(self,user,province,city,id):
self.__db.InsertRecords(self.__db.FetionUsers,username = unicode(user),province = unicode(province),\
city = unicode(city),phoneid = id)
self.__db.session.commit()
self.__db.session.close()
def insertSendMsgInfo(self,username,message,now = datetime.datetime.now()):
self.__db.InsertRecords(self.__db.SendMsg,username = unicode(username),message = unicode(message),sendtime = now)
self.__db.session.commit()
self.__db.session.close()
def querySendMsgInfo(self):
res = self.__db.session.query(self.__db.SendMsg.id,self.__db.SendMsg.username,self.__db.SendMsg.message,\
self.__db.SendMsg.sendtime).all()
self.__db.session.commit()
return res
def queryFetionUsers(self):
res = self.__db.session.query(self.__db.FetionUsers.username,self.__db.FetionUsers.province,\
self.__db.FetionUsers.city,self.__db.FetionUsers.phoneid).all()
self.__db.session.commit()
return res
def queryProvinceMap(self):
res = self.__db.session.query(self.__db.ProvincesMap.realname,self.__db.ProvincesMap.imagename).all()
self.__db.session.commit()
return res
# print len(res[0])
# print res[0][0]
def queryCityMap(self):
res = self.__db.session.query(self.__db.CitiesMap.realname,self.__db.CitiesMap.imagename).all()
self.__db.session.commit()
return res
# print res[0][0].encode('gbk')
def deleteRecord(self,tableNum,name):
if tableNum == 1:
self.__db.RemoveRecords(self.__db.CitiesMap,realname = unicode(name))
else :
self.__db.RemoveRecords(self.__db.FetionUsers,username = unicode(name))
self.__db.session.commit()
self.__db.session.close()
def deleteTable(self,tableNum):
if tableNum == 1:
self.__db.RemoveRecords(self.__db.CitiesMap)
elif tableNum == 2:
self.__db.RemoveRecords(self.__db.FetionUsers)
self.__db.session.commit()
self.__db.session.close()
def _setupDatabase(self):
try:
from sqlalchemy.engine import create_engine
engine = create_engine(self.__dbConString,echo = False)
engine.text_factory = str
metadata.bind = engine
Session = sessionmaker(bind = engine,autocommit = True)
import dborm
self.__db = locals()['dborm'] #得到dborm.py中的方法,就是上面elixir的代码
except Exception,e:
print "Set up database error %s" % e
return -1
return 1
def closeSession(self):
self.__db.session.close()
def insertCity(self,real,image):
self.__db.InsertRecords(self.__db.CitiesMap,realname = unicode(real),imagename = image)
self.__db.session.commit()
self.__db.session.close()
一句SQL语句不用写就搞定了对数据库的各种操作,而且还屏蔽了各种数据库之间SQL语句语法的差异,这就是sqlchemy+elixir的强大之处