zoukankan      html  css  js  c++  java
  • Python操作Mysql数据库

    (1)python DB API包含的内容:
                   
    (2)使用python DB API访问数据库的流程:
     
                   
    (3)python DB API的主要方法:
    • connect连接类:   
      • conn = pymsql.connect(host="localhost", port=3306, user="root", passwd="root", db="goods", charset="utf8"):创建一个mysql连接。
      • cursor = conn.cursor():创建游标,用于python和mysql之间通信,即执行sql语句。
      • conn.rollback(): 回滚,使得cursor指代的sql语句执行失败后,数据库保持执行前的状态不变。
      • conn.commit():确认,使得sql语句执行后,数据库产生相应变化。
      • conn.close():关闭连接。
    • cursor游标类:   
      • cursor.execute(sql):实参为sql语句的字符串,用于在MySQL中执行sql语句。
      • cursor.fetchone():返回查询结果的下一行,形式为元组,即:((1 line),(2 line),(3 line) )。
      • cursor.fetchsize(size):返回查询结果的下size行,形式为元组。
      • cursor.fetchall():返回查询结果的剩余行,形式为元组。
      • cursor.rowcount:最近一次execute中影响数据库的行数。
      • cursor.close():关闭游标。
    (4)python3.6操作数据库---简单增删改查:
    import pymysql
    if __name__ == '__main__':
    #创建MYSQL连接
    conn = pymysql.Connect(host = '127.0.0.1',port = 3306,user = 'root',passwd = 'root',db = 'databasetest',charset = 'utf8')
    #创建游标:用于 Python 和 Mysql 之间的通信,即:用于执行 SQL 语句。
    cursor = conn.cursor()
    try:
        #增加数据库
        sql = "INSERT INTO userdata VALUES (1,'lbg'),(2,'zgj'),(3,'ldt')"
        cursor.execute(sql)
        #删除数据库
        sql2 = "DELETE FROM userdata WHERE id=3"
        cursor.execute(sql2)
        #更新数据库
        sql3 = "UPDATE userdata SET username='wjz' WHERE id=2"
        cursor.execute(sql3)
        #查询数据库
        sql4 = "SELECT * FROM userdata"
        num = cursor.execute(sql4)
        print("the number of the userdata: %d" % num)
        #fetchall返回一个元组,其中包含所有查询的结果。
        for row in cursor.fetchall(): 
            print(" ID: "+str(row[0])+" name: "+row[1])
    except Exception as reason:
        #SQL事物回滚:将事务中对数据库的所有已经完成的操作全部撤销,回滚到事务开始时的状态
        conn.rollback()
        print('事务处理失败', reason)
    else:
        #SQL事物确认:只有事物确认之后,数据库操作才会生效
        conn.commit()
        print('事务处理成功',cursor.rowcount)
    finally:
        #关闭连接和游标
        cursor.close()
        conn.close()
    (5)python3.6操作数据库---银行转账:
    import pymysql
    import sys
    
    class TransferMoney:
        def __init__(self,conn):
            self.conn = conn
        def transfer(self,id_out,id_in,money):
            try:
                self.HasIdAccount(id_out)
                self.HasIdAccount(id_in)
                self.OutIdHasEnoughMoney(id_out,money)
                self.SubMoney(id_out,money)
                self.AddMoney(id_in,money)
                conn.commit()
            except Exception as e:
                self.conn.rollback()
                raise e
        def HasIdAccount(self,userid):
            cursor = self.conn.cursor()
            try:
                sql = "select * from goods_change where id = %s" % userid
                cursor.execute(sql)
                res = cursor.fetchall()
                if len(res) != 1:
                    raise Exception("id %s is not exist" % userid)
                    print("Has id " + str(userid))
            finally:
                cursor.close()
        def OutIdHasEnoughMoney(self,userid,change_money):
            cursor = self.conn.cursor()
            try:
                sql = "select money from goods_change where id = %s" % userid
                cursor.execute(sql)
                if int(cursor.fetchone()[0]) < int(change_money):
                    raise Exception("id %s has not enough money" % userid)
                    print("id " + str(userid) + " has enough money")
            finally:
                cursor.close()
        def SubMoney(self,userid,change_money):
            cursor = self.conn.cursor()
            try:
                sql = "update goods_change set money=money-%s where id=%s" % (change_money,userid)
                cursor.execute(sql)
                if cursor.rowcount != 1:
                    raise Exception("id %s is not exist" % userid)
                    print("id " + str(userid) + " sub " + str(change_money) + " RMB")
            finally:
                cursor.close()
        def AddMoney(self,userid,change_money):
            cursor = self.conn.cursor()
            try:
                sql = "update goods_change set money=money+%s where id=%s" % (change_money,userid)
                cursor.execute(sql)
                if cursor.rowcount != 1:
                    raise Exception("id %s is not exist" % userid)
                    print("id " + str(userid) + " add " + str(change_money) + " RMB")
            finally:
                cursor.close()
    
    if __name__ == '__main__':
        conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',passwd='root',db='goods',charset='utf8')
        id_out = sys.argv[1]
        id_in = sys.argv[2]
        money = sys.argv[3]
        trans = TransferMoney(conn)
        try:
            trans.transfer(id_out,id_in,money)
        except Exception as reason:
            print('事务处理失败:', reason)
        finally:
            conn.close()
  • 相关阅读:
    flink 读取kafka 数据,partition分配
    Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"
    flume接收http请求,并将数据写到kafka
    【翻译】Flume 1.8.0 User Guide(用户指南) Processors
    【翻译】Flume 1.8.0 User Guide(用户指南) Channel
    【翻译】Flume 1.8.0 User Guide(用户指南) Sink
    【翻译】Flume 1.8.0 User Guide(用户指南) source
    【翻译】Flume 1.8.0 User Guide(用户指南)
    Apache Flink 简单安装
    Java之使用IDE
  • 原文地址:https://www.cnblogs.com/ladawn/p/8909082.html
Copyright © 2011-2022 走看看