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

    python操作mysql

    一, 数据库的安装和连接

    PyMySQL的安装:

    pip install PyMySQL
    

    python连接数据库:

    import pymysql
    
    db = pymysql.connect("数据库ip","用户","密码","数据库" ) # 打开数据库连接
    cursor.execute("SELECT VERSION()")                    # 使用 execute() 方法执行 SQL 查询
    data = cursor.fetchone()                              # 使用 fetchone() 方法获取单条数据
    print ("Database version : %s " % data)
    db.close()                                            # 关闭数据库连接
    
    # 其他参数
    import pymysql
    
    conn = pymysql.connect(
            host='localhost', user='root', password="root",
            database='db', port=3306, charset='utf-8',
    )
    
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
    

    二, 创建表操作

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
     
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
     
    cursor.execute(sql)
     
    # 关闭数据库连接
    db.close()
    

    三, 操作数据

    一, 插入操作

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
       cursor.execute(sql) # 执行sql语句
       db.commit()         # 提交到数据库执行
    except:
       db.rollback()       # 如果发生错误则回滚
     
    # 关闭数据库连接
    db.close()
    
    # 注意: 不要自己进行SQL命令的字符串拼接,会产生SQL注入问题
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 插入语句
    sql = "INSERT INTO EMPLOYEE(FIRST_NAME, 
           LAST_NAME, AGE, SEX, INCOME) 
           VALUES (%s, %s,  %s,  %s,  %s )" % 
           ('Mac', 'Mohan', 20, 'M', 2000)
    try:
       
       cursor.execute(sql)  # 执行sql语句
       db.commit()          # 执行sql语句
    except:
       db.rollback()        # 发生错误时回滚
     
    # 关闭数据库连接
    db.close()
    

    二, 查询操作

    Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

    • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
    • fetchall(): 接收全部的返回结果行.
    • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 查询语句
    sql = "SELECT * FROM EMPLOYEE 
           WHERE INCOME > %s" % (1000)
    try:
       
       cursor.execute(sql)# 执行SQL语句
       results = cursor.fetchall()# 获取所有记录列表
       for row in results:
          fname = row[0]
          lname = row[1]
          age = row[2]
          sex = row[3]
          income = row[4]
           # 打印结果
          print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % 
                 (fname, lname, age, sex, income ))
    except:
       print ("Error: unable to fetch data")
     
    # 关闭数据库连接
    db.close()
    

    三, 更新操作

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    try:
       cursor.execute(sql)  # 执行SQL语句
       db.commit()          # 提交到数据库执行
    except
       db.rollback()        # 发生错误时回滚
     
    # 关闭数据库连接
    db.close()
    

    四, 删除操作

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 删除语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    try
       cursor.execute(sql)  # 执行SQL语句
       db.commit()          # 提交修改
    except
       db.rollback()        # 发生错误时回滚# 关闭连接
    db.close()
    

    四, SQL注入问题

    注意: 不要自己进行SQL命令字符串拼接,而是交给pymysql去做

    # 如下代码,会造成可以在不知道账号和密码的情况下查询
    import pymysql
    
    conn = pymysql.connect(host='127.0.0.1', user='root', password="123",database='ceshi')
    
    cur = conn.cursor()
    user = "akhksh' or 1=1 ;-- "
    password = '*******'
    sql = "select * from userinfo where username = %s and password =%s;" % (user, password)
    
    cur.execute(sql)
    ret = cur.fetchone()
    cur.close()
    conn.close()
    
    # 而使用pymysql的execute()方法自动拼接,不会出现此类问题
    import pymysql
    
    conn = pymysql.connect(host='127.0.0.1', user='root', password="123", database='ceshi')
    cur = conn.cursor()
    user = "akhksh' or 1=1 ;-- "
    password = '*******'
    sql = "select * from userinfo where username = %s and password =%s;"
    
    cur.execute(sql, (user, password))
    ret = cur.fetchone()
    cur.close()
    conn.close()
    
  • 相关阅读:
    使用golang访问kubebernetes
    使用 Rancher 管理现有 Kubernetes 集群
    Running powershell scripts during nuget package installation and removal
    How to Create, Use, and Debug .NET application Crash Dumps in 2019
    寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目
    Selenium+Java之解决org.openqa.selenium.InvalidArgumentException: invalid argument报错问题
    Selenium环境搭建
    关于Xpath定位方法知道这些基本够用
    Web自动化之浏览器启动
    【翻译】编写代码注释的最佳实践
  • 原文地址:https://www.cnblogs.com/maqian/p/12084842.html
Copyright © 2011-2022 走看看