MySQL增加元祖_封装的mysql,改良了一下+1

import MySQLdb

import sys

from mod_config import DB_Confg,CommParams

from logger import Log

reload(sys)

sys.setdefaultencoding('utf-8')

log = Log()

class MysqldbHelper:

#获取数据库连接

def __init__(self):

self.conn =MysqldbHelper.__getCon()

self.cur = self.conn.cursor(MySQLdb.cursors.DictCursor)

@staticmethod

def __getCon():

try:

conn=MySQLdb.connect(host=DB_Confg.Host_Sql(),

user=DB_Confg.User_sql(),

passwd=DB_Confg.Password_Sql(),

db=DB_Confg.Dbname_Sql(),

port=DB_Confg.Port_Sql(),

charset=DB_Confg.Charset_Sql())

return conn

except MySQLdb.Error,e:

log.info("Mysqldb Error:%s" %e)

#查询方法,使用con.cursor(MySQLdb.cursors.DictCursor),返回结果为字典

def Getall(self,sql,param = None):#手动输入sql语句

'''

@summary: 执行查询,并取出所有结果集

@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来

@param param: 可选参数,条件列表值(元组)

@return: result list(字典对象)/boolean 查询到的结果集

'''

try:

if param == None:

rep_sql = self.cur.execute(sql)

else:

rep_sql = self.cur.execute(sql,param)

if rep_sql > 0:

result = self.cur.fetchall()

else:

result = "None"

return result

except MySQLdb.Error,e:

log.info("Mysqldb Error:%s" %e)

self.cur.close()

self.conn.close()

def Getone(self,sql,param = None):

'''

@summary: 执行查询,并取出第一条

@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来

@param param: 可选参数,条件列表值(元组/列表),单个查询返回列表

@return: result list/boolean 查询到的结果集

'''

try:

if param == None:

rep_sql = self.cur.execute(sql)

else:

rep_sql = self.cur.execute(sql,param)

if rep_sql > 0:

result = self.cur.fetchone()

else:

result = False

return result

except MySQLdb.Error,e:

log.info("Mysqldb Error:%s" %e)

finally:

self.cur.close()

self.conn.close()

def GetNum(self,sql, num, param = None):

'''

@summary: 执行查询,并取出num条结果

@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来

@param num:取得的结果条数

@param param: 可选参数,条件列表值(元组)

@return: result list/boolean 查询到的结果集,返回tuple

'''

try:

if param == None:

rep_sql = self.cur.execute(sql)

else:

rep_sql = self.cur.execute(sql,param)

if rep_sql > 0:

result = self.cur.fetchmany(num)

else:

result = False

return result

except MySQLdb.Error,e:

log.info("Mysqldb Error:%s" %e)

self.cur.close()

self.conn.close()

#带参数的更新方法,eg:sql='insert into pythontest values(%s,%s,%s,now()',params=(6,'C#','good book')

def InsertOne(self,sql,value):

'''

:param sql: 语法 inster into tables_name(a,b,c)vales(%s,%s,%s)

:param value: %s的参数

:return:

'''

try:

self.cur.execute(sql,value)

self.conn.commit()

return self.__getInsertId()

except MySQLdb.Error,e:

print "Mysql Error %s"%e

self.conn.rollback()

finally:

self.cur.close()

self.conn.close()

#使用executemany插入时,数量量超过1M时,会报错,因为mysql中设置了最大的是1M的数据量;这时就需要去修改mysql的设置

def IsertMany(self,values,sql):

'''

:param values: %s参数,必须是tuple的类型

:param sql: mysql语法格式(insert into tables_name(a,b,c) values(%s,%s,%s)

:return: 插入的速度是execute的十倍快

eg:

for i in range(2):

values.append((i,i))

print len(values)

'''

try:

count = self.cur.executemany(sql,values)

self.conn.commit()

return count

except MySQLdb.Error,e:

log.info("Mysql Error: %s"%e)

self.conn.rollback()

finally:

self.cur.close()

self.conn.close()

def __getInsertId(self):

"""

获取当前连接最后一次插入操作生成的id,如果没有则为0

"""

self.cur.execute("SELECT @@IDENTITY AS id")

result = self.cur.fetchall()

return result[0]['id']

def updateByParam(self,sql,params = None):

'''cursor.execute("SELECT * FROM t1 WHERE id = %s", (5,))'''

try:

if params == None:

count = self.cur.execute(sql)

else:

count = self.cur.execute(sql,params)

self.conn.commit()

return count

except MySQLdb.Error,e:

self.conn.rollback()

print "Mysqldb Error:%s" %e

finally:

self.cur.close()

self.conn.close()

def delete_information(self,sql,params = None):

try:

if params == None:

count =self.cur.execute(sql)

elif type(params) == type(tuple()):

count =self.cur.executemany(sql,params)

else:

#executemany必须是tuple的类型才可以使用

count =self.conn.executemany(sql,params)

self.conn.commit()

return count

except MySQLdb.Error,e:

self.conn.rollback()

print "Mysql Error %s" %e

finally:

self.cur.close()

self.conn.close()

if __name__ == "__main__":

# a = MysqldbHelper()

# # sql="select * from phoneuser WHERE account = %s and alias = %s"

# # sql="select * from camera WHERE cid = %s"

# # print sql

# # par = ('290200000011')

# fd = a.Getone("select * from camera WHERE cid = '%s'" %290200000011)

# # fd = a.GetNum(sql,1,par)

# print fd

# for row in fd:

# print row[""]

#循环插入的例子

# fd=a.select(sql)

# value=[1,'hi rollen']

# cur.execute('insert into test values(%s,%s)',value)

#

# values=[]

# for i in range(20):

# values.append((i,'hi rollen'+str(i)))

#

# cur.executemany('insert into test values(%s,%s)',values)

#

# cur.execute('update test set info="I am rollen" where id=3')

#

# conn.commit()

# cur.close()

# conn.close()

'''遇到的坑

1.mysql中%s的参数中不要传数字值,会引起mysql warning;

mysql Warning | 1292 | Truncated incorrect DOUBLE value: '25a3c516a4c15eda917963e48a254'  |

可能造成的原因:

on running a MySQL query, it could be caused by using a numeric value against a CHAR/VARCHAR column.

2.executemany使用时,传的参数必须是元祖

3.fetchone返回的是dict

4.fetchall返回是元祖。所以取值时,需要先fd[0]["information"]

'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值