<p><span></span>最近,看了关于的一篇帖子,关于python的,决定花几天看下python的基本知识。看了基础知识后,发现记不住,就随手写了点代码,加深自己的记忆。</p>
暂时主要写了对数据库的操作,其他的都还没有做,后续会逐步完善,代码写的很基础,里面肯定还存在很多问题,自己保存起,怕后面丢失了。
主要是 pyMysql库 实现了对mysql数据库的操作,目前支持读写分离。
1、app_db.py对数据库的配置。 支持读写分离。
-
def dbconfig() :
-
config = dict();
-
config[
'master'] = {
-
"write" : {
-
'host' :
'localhost',
-
'dbuser' :
'root',
-
'dbpwd' :
'',
-
'port' :
3306,
-
'dbname' :
'liuyan',
-
'dbprefix' :
'ly_',
-
},
-
"read" : {
-
'host':
'localhost',
-
'dbuser':
'root',
-
'dbpwd':
'',
-
'port':
3306,
-
'dbname':
'liuyan',
-
'dbprefix':
'ly_',
-
}
-
};
-
-
config[
'server'] = {
-
"write": {
-
'host':
'localhost',
-
'dbuser':
'root',
-
'dbpwd':
'',
-
'port':
3306,
-
'dbname':
'liuyanben',
-
'dbprefix':
't_',
-
},
-
"read": {
-
'host':
'localhost',
-
'dbuser':
'root',
-
'dbpwd':
'',
-
'port':
3306,
-
'dbname':
'liuyanben',
-
'dbprefix':
't_',
-
}
-
};
-
return config;
2、app_db.py 实现对数据库的操作,支持读写分离。
-
#@author SteveGao
-
-
-
import sys;
-
import pymysql;
-
import random;
-
from config.app_db
import dbconfig;
-
-
class DB :
-
link = dict();
-
_res =
'';
-
_mode =
"read";
# write,read
-
_dbconfig = dbconfig();
-
_host =
'';
-
def __init__(self,host = "master"):
-
self._host = host;
-
-
def connect(self,mode = "read"):
-
try :
-
self._mode = mode;
-
self._dbconfig = self._dbconfig[self._host][self._mode];
-
self.host = self._dbconfig[
'host'];
-
self.dbuser = self._dbconfig[
'dbuser'];
-
self.password = self._dbconfig[
'dbpwd'];
-
self.dbname = self._dbconfig[
'dbname'];
-
self.port = self._dbconfig[
'port'];
-
self._res = pymysql.cursors.DictCursor;
-
self.link[self._host] = pymysql.connect(self.host,self.dbuser,self.password,self.dbname,self.port);
-
except Exception
as err:
-
print(
"DBERR数据库连接失败: \n[%s]" %(err));
-
exit();
-
-
def getTableName(self,tableName):
-
return self._dbconfig[
'dbprefix'] + tableName;
-
-
-
'''
-
查询单张表的一条记录
-
'''
-
def getOne(self,tableName,id):
-
try :
-
self.connect(
'read');
-
tableName = self.getTableName(tableName);
-
cursors = self.link[self._host].cursor(self._res);
-
sql =
"SELECT * FROM %s WHERE id = %d LIMIT 1";
-
cursors.execute(sql %(tableName,int(id)));
-
result = cursors.fetchone();
-
return result;
-
except Exception
as err:
-
print(
"DBERR数据库查询单条记录失败: \n[%s]" % (err));
-
exit();
-
-
'''
-
根据条件查询单表的内容
-
'''
-
def getCondition(self,tableName, condition = ''):
-
try :
-
self.connect(
'read');
-
cursors = self.link[self._host].cursor(self._res);
-
tableName = self.getTableName(tableName);
-
if (condition):
-
sql =
"SELECT * FROM %s WHERE %s";
-
cursors.execute(sql % (tableName, condition));
-
else :
-
sql =
"SELECT * FROM %s;";
-
cursors.execute(sql % (tableName));
-
-
result = cursors.fetchall();
-
result = list(result);
-
return result;
-
except Exception
as err:
-
print(
"DBERR数据库按条件查询记录失败: \n[%s]" % (err));
-
exit();
-
-
-
'''
-
根据SQL语句查询
-
'''
-
def executeSql(self,sql,findOne = 'm'):
-
try :
-
sql = sql.lstrip();
-
if (len(sql) ==
0):
-
return
False;
-
-
operate = sql[
0:
6].upper();
-
if (operate ==
"SELECT"):
-
self._mode =
'read';
-
elif (operate ==
'INSERT'
or operate ==
"UPDATE"
or operate ==
'DELETE') :
-
self._mode =
'write';
-
else :
-
self._mode =
'write';
-
-
self.connect(self._mode);
-
cursors = self.link[self._host].cursor(self._res);
-
-
execs = cursors.execute(sql);
-
if (operate ==
"SELECT") :
-
if ((findOne ==
'm')
and (
"LIMIT 1"
not
in sql.upper())) :
-
result = cursors.fetchall();
-
else :
-
result = cursors.fetchone();
-
return result;
-
else :
-
return execs;
-
-
except Exception
as err:
-
print(
"DBERR数据库执行失败: \n[%s]" % (err));
-
exit();
-
-
'''
-
使用字典插入单条数据
-
link = DB('localhost','root','','liuyan');
-
data = {"user_name":"stevegao","password" : "444444",'create_time':"2017-02-12 09:12:12", 'login_times' : "1"};
-
link.insertAll('ly_user',data);
-
'''
-
def insert(self,table,data):
-
try :
-
self.connect(
'write');
-
table = self.getTableName(table);
-
tinsert =
"INSERT INTO %s";
-
fieldList =
' (';
-
valueList =
' (';
-
for field
in data :
-
fieldList +=
"`" + field +
"`,";
-
valueList +=
'"' + data[field] +
'",';
-
fieldList = fieldList[
0:
-1] +
") ";
-
valueList = valueList[
0:
-1] +
") ";
-
sql = tinsert + fieldList +
"values " + valueList;
-
cursors = self.link[self._host].cursor(self._res);
-
insert = cursors.execute(sql %(table));
-
print(sql %(table));
-
#self.link.commit();
-
return insert;
-
except Exception
as err :
-
self.link.rollback();
-
print(
"DBERR数据库插入单条记录失败:\n[%s]" % (err));
-
exit();
-
-
-
'''
-
使用字典,批量插入数据到数据库
-
link = DB('localhost','root','','liuyan');
-
data = dict();
-
data[0] = {"user_name":"stevegao","password" : "444444",'create_time':"2017-02-12 09:12:12", 'login_times' : "1"};
-
data[1] = {"user_name":"jennygao","password" : "555555",'create_time':"2017-02-12 09:12:12", 'login_times' : "1"};
-
ii = link.insertAll('ly_user',data);
-
'''
-
-
def insertAll(self,table,data):
-
try :
-
self.connect(
'write');
-
table = self.getTableName(table);
-
tinsert =
"INSERT INTO %s";
-
fieldList =
' (';
-
values =
'';
-
oneField = data[
0];
-
for field
in oneField:
-
fieldList +=
"`" + field +
"`,";
-
fieldList = fieldList[
0:
-1] +
") ";
-
-
for row
in data :
-
valueList =
'(';
-
for field
in data[row] :
-
valueList +=
'"' + data[row][field] +
'",';
-
values += valueList[
0:
-1] +
"),";
-
-
-
sql = tinsert + fieldList +
"values " + values[
0:
-1];
-
cursors = self.link[self._host].cursor(self._res);
-
insert = cursors.execute(sql %(table));
-
#self.link.commit();
-
return insert;
-
except Exception
as err:
-
self.link.rollback();
-
print(
"DBERR数据库批量插入记录失败:\n[%s]" % (err));
-
exit();
-
-
def commit(self):
-
self.link[self._host].commit();
-
-
def rollback(self):
-
self.link[self._host].rollback();
-
-
'''
-
关闭数据库链接
-
'''
-
def close(self):
-
self.link[self._host].close();
-
-
-
-
3、app_model.py 支持链式操作,让开发变得 简单。
-
#@author SteveGao
-
-
from gyk.database.app_db
import DB;
-
from config.app_db
import dbconfig;
-
-
-
-
'''
-
向数据库插入单条数据
-
model = Model();
-
data = {"user_name":"stevegao","password" : "444444",'create_time':"2017-02-12 09:12:12", 'login_times' : "1"};
-
insert = model.table('ly_user').insert(data);
-
if (insert) :
-
model.db.link.commit(); //提交事务
-
else :
-
model.db.link.rollback(); //回滚事务
-
'''
-
-
class Model :
-
lastsql =
'';
-
_wherestr =
'';
-
_orderstr =
'';
-
_groupstr =
'';
-
_limitstr =
'';
-
_fieldstr =
'';
-
_tablename =
'';
-
_having =
'';
-
_host =
"";
-
-
db = {};
-
-
def __init__(self,host = "master"):
-
-
self._host = host;
-
mysql = DB(host.lower());
#实例化数据库类
-
self.db[self._host] = mysql;
-
-
def max(self,field):
-
sql = self._parseStatis(
'max',field);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
def min(self,field):
-
sql = self._parseStatis(
'min',field);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
def avg(self,field):
-
sql = self._parseStatis(
'avg',field);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
def count(self,field):
-
sql = self._parseStatis(
'count',field);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
-
def sum(self,field):
-
sql = self._parseStatis(
'sum',field);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
-
def table(self,tablename):
-
pconfig = dbconfig();
-
prefix = pconfig[self._host][
'write'][
'dbprefix'];
-
self._tablename =
"`" + prefix + tablename +
"`";
-
return self;
-
-
def where(self,where = ""):
-
if (where) :
-
self._wherestr = self._parseWhereDict(where);
-
else :
-
self._wherestr = where;
-
return self;
-
-
def orderBy(self,order = ""):
-
self._orderstr = order;
-
return self;
-
-
def groupBy(self,groupby = ""):
-
self._groupstr = groupby;
-
return self;
-
-
def having(self,having = ""):
-
self._having = having;
-
return self;
-
-
def limit(self,limit = ""):
-
self._limitstr = limit;
-
return self;
-
-
def field(self,field = "*"):
-
self._fieldstr = field;
-
return self;
-
-
def select(self):
-
sql = self._parseQuery();
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
def find(self):
-
sql = self._parseQuery(
1);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql,
's');
-
return result;
-
-
def query(self,sql):
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
'''
-
插入单条数据,data类型为字典型
-
'''
-
def insert(self,data):
-
sql = self._parseInsert(data);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
'''
-
批量插入数据,data类型为字典型
-
'''
-
def insertAll(self,data):
-
sql = self._parseInsertAll(data);
-
if (sql ==
False) :
-
return sql;
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql);
-
return result;
-
-
def delete(self):
-
sql = self._parseDelete();
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql,
's');
-
return result;
-
-
def update(self,data):
-
sql = self._parseSetDict(data);
-
self.lastsql = sql;
-
result = self.db[self._host].executeSql(sql,
's');
-
return result;
-
-
'''
-
提交事务
-
'''
-
-
def commit(self):
-
self.db[self._host].commit();
-
-
'''
-
提交回滚
-
'''
-
-
def rollback(self):
-
self.db[self._host].rollback();
-
-
'''
-
解析查询语句
-
'''
-
def _parseQuery(self,limit = 2):
-
tempsql =
"";
-
tempsql =
"SELECT ";
-
if (self._fieldstr) :
-
tempsql += self._fieldstr;
-
else :
-
tempsql +=
"*";
-
tempsql +=
" FROM ";
-
-
if (self._tablename) :
-
tempsql += self._tablename;
-
-
if (self._wherestr):
-
tempsql +=
" WHERE ";
-
tempsql += self._wherestr;
-
-
tempsql +=
" ";
-
-
if (self._groupstr):
-
tempsql +=
" GROUP BY ";
-
tempsql += self._groupstr;
-
-
if (self._having) :
-
tempsql +=
" HAVING ";
-
tempsql += self._having;
-
-
if (self._orderstr):
-
tempsql +=
" ORDER BY ";
-
tempsql += self._orderstr;
-
tempsql +=
" ";
-
-
if (limit ==
2) :
-
if (self._limitstr):
-
tempsql +=
" LIMIT ";
-
tempsql += self._limitstr;
-
else :
-
tempsql +=
" LIMIT 1";
-
-
return tempsql;
-
-
-
def _parseInsert(self,data):
-
tinsert =
"";
-
tinsert +=
"INSERT INTO ";
-
-
if (self._tablename) :
-
tinsert += self._tablename;
-
-
fieldList =
' (';
-
valueList =
' (';
-
for field
in data:
-
fieldList +=
"`" + field +
"`,";
-
valueList +=
'"' + data[field] +
'",';
-
fieldList = fieldList[
0:
-1] +
") ";
-
valueList = valueList[
0:
-1] +
") ";
-
sql = tinsert + fieldList +
"values " + valueList;
-
return sql;
-
-
def _parseInsertAll(self,data):
-
if (data.get(
0) ==
None) :
-
return
False;
-
tinsert =
"";
-
tinsert +=
"INSERT INTO ";
-
if (self._tablename) :
-
tinsert +=
"`" +self._tablename +
"`";
-
fieldList =
' (';
-
values =
'';
-
oneField = data[
0];
-
for field
in oneField:
-
fieldList +=
"`" + field +
"`,";
-
fieldList = fieldList[
0:
-1] +
") ";
-
-
for row
in data:
-
valueList =
'(';
-
for field
in data[row]:
-
valueList +=
'"' + data[row][field] +
'",';
-
values += valueList[
0:
-1] +
"),";
-
-
sql = tinsert + fieldList +
"VALUES " + values[
0:
-1];
-
return sql;
-
-
'''
-
解析查询语句
-
'''
-
-
def _parseStatis(self,func,field):
-
tempsql =
"";
-
tempsql =
"SELECT ";
-
if (field):
-
tempsql += func +
"(" + field +
")";
-
else:
-
tempsql += func +
"(" +
1 +
")";
-
tempsql +=
" FROM ";
-
-
if (self._tablename):
-
tempsql += self._tablename;
-
-
if (self._wherestr):
-
tempsql +=
" WHERE ";
-
tempsql += self._wherestr;
-
-
tempsql +=
" ";
-
-
if (self._groupstr):
-
tempsql +=
" GROUP BY ";
-
tempsql += self._groupstr;
-
-
if (self._having) :
-
tempsql +=
" HAVING ";
-
tempsql += self._having;
-
-
if (self._orderstr):
-
tempsql +=
" ORDER BY ";
-
tempsql += self._orderstr;
-
tempsql +=
" ";
-
if (self._groupstr ==
"") :
-
tempsql +=
" LIMIT 1";
-
-
return tempsql;
-
-
-
def _parseDelete(self):
-
-
tempsql =
"";
-
tempsql =
"DELETE ";
-
tempsql +=
" FROM ";
-
-
if (self._tablename):
-
tempsql += self._tablename;
-
-
if (self._wherestr):
-
tempsql +=
" WHERE ";
-
tempsql += self._wherestr;
-
-
tempsql +=
" ";
-
-
if (self._orderstr):
-
tempsql +=
" ORDER BY ";
-
tempsql += self._orderstr;
-
tempsql +=
" ";
-
-
if (self._limitstr):
-
tempsql +=
" LIMIT ";
-
tempsql += self._limitstr;
-
-
return tempsql;
-
-
def _parseUpdate(self,data):
-
-
if (
not data) :
-
return
False;
-
-
tempsql =
"";
-
tempsql =
"UPDATE ";
-
-
if (self._tablename):
-
tempsql += self._tablename;
-
-
tempsql +=
" SET ";
-
-
tempsql += self._parseDict(data);
-
-
if (self._wherestr):
-
tempsql +=
" WHERE ";
-
tempsql += self._wherestr;
-
-
tempsql +=
" ";
-
-
if (self._orderstr):
-
tempsql +=
" ORDER BY ";
-
tempsql += self._orderstr;
-
tempsql +=
" ";
-
-
if (self._limitstr):
-
tempsql +=
" LIMIT ";
-
tempsql += self._limitstr;
-
-
return tempsql;
-
-
def _parseSetDict(self,data):
-
result =
"";
-
if (isinstance(data, dict)):
-
temp =
"";
-
for field
in data :
-
temp +=
'`' + field +
'` = "' + data[field] +
'",';
-
result = temp[
0:
-1];
-
else :
-
result = data;
-
return result;
-
-
def _parseWhereDict(self,data):
-
result =
"";
-
if (isinstance(data, dict)):
-
temp =
"";
-
for field
in data :
-
temp +=
'`' + field +
'` = "' + data[field] +
'" AND ';
-
result = temp.rstrip()[
0:
-3];
-
else :
-
result = data;
-
return result;
-
-
-