12_Python操作MySQL(basic)
""" Test connection to MySQL using mysql-client conn = MySQLdb.connect(host,port,user,passwd,db,charset) cursor = conn.cursor() cursor.execute(sql, (arg1,arg2,arg3...)) conn.commit() conn.rollback() cursor.description # (col1,...),(col2,....),(col3,...),(col4,...) cursor.rowcount columns = map(lambda e:e[0], cursor.description) columns = tuple(columns) # (col1,col2,col3...) cur_record = cursor.fetchone() # (key1,key2,key3...) cur_result = dict(zip(columns,cur_record)) # {col1:key1, col2:key2, col3:key3....} cursor.close() # no more operation is valid if cursor closed conn.close() # close connection to MySQL database """ import MySQLdb import datetime class MySQLHandler(): def __init__(self): self.conn = None self.cursor = None self.cur_record = () self.host = '' self.port = 0 self.user = '' self.passwd = '' self.db = '' self.charset = 'utf8' def connect(self, host, port, user, passwd, db, charset): self.host = host self.port = port self.user = user self.passwd = passwd self.db = db self.charset = charset try: self.conn = MySQLdb.connect( host = self.host, port = self.port, user = self.user, passwd = self.passwd, db = self.db, charset = self.charset ) self.cursor = self.conn.cursor() except MySQLdb.Error as e: print("Conn MySQL Error, %d: %s" %(e.args[0], e.args[1]) ) def execute_one(self, sql, args): self.cursor.execute(sql, args) def insert_one(self,sql,args): try: # 如果多条插入语句都没异常,则直接通过commit()将数据写入db # 如果任意一条语句产生异常,则进入except处理(还没运行try中的commit) # except中可以全部不提交,或者提交没触发异常的sql语句 # 全部不提交, 则except中写入:self.conn.commit() # 部分提交(没触发异常的语句结果,则except中写入:self.conn.commit() self.cursor.execute(sql,args) # write changes to db, if no exception self.conn.commit() except : # drop data, if any exception happens, no data saved to db self.conn.rollback() def delete_one(self,sql,args): try: # 如果多条delete语句都没异常,则直接通过commit()将数据写入db # 如果任意一条语句产生异常,则进入except处理(还没运行try中的commit) # except中可以全部不提交,或者提交没触发异常的sql语句 # 全部不提交, 则except中写入:self.conn.commit() # 部分提交(没触发异常的语句结果,则except中写入:self.conn.commit() self.cursor.execute(sql,args) # write changes to db, if no exception self.conn.commit() except : # drop data, if any exception happens, no data saved to db self.conn.rollback() def show(self): # show row count print("Row Count: " + str(self.cursor.rowcount)) # get table column name columns = map(lambda e: e[0], self.cursor.description) columns = tuple(columns) # show all results self.cur_record = self.cursor.fetchone() while self.cur_record != None: print( dict(zip(columns, self.cur_record)) ) self.cur_record = self.cursor.fetchone() def close(self): # close connection to mysql self.cursor.close() self.conn.close() # reset attributes self.conn = None self.cursor = None self.cur_record = () self.host = '' self.port = 0 self.user = '' self.passwd = '' self.db = '' self.charset = 'utf8' # Test MySQLHandler, create connection mysql_handler = MySQLHandler() mysql_handler.connect('localhost', 3306, 'root', 'weilan0415', 'news', 'utf8') # prepare sql to execute # sql = 'select * from employees where salary > %s limit %s, %s' # args = (2500, 0, 10) # run 1 sql operation # mysql_handler.execute_one(sql, args) # insert one record into mysql sql = 'insert into news (title, image, content, types, create_at, is_valid) ' \ 'value (%s, %s, %s, %s, %s, %s);' cur_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") mysql_handler.insert_one(sql, ("new222", "D:\\Durian.jpg", "新闻内容222", "美食", cur_time, 1) ) # delete sql = 'delete from news where id between 6 and 10' mysql_handler.delete_one(sql, ()) # query sql = 'select * from news' mysql_handler.execute_one(sql, ()) # show result mysql_handler.show() # close connection mysql_handler.close()