本文最后更新于:3 years ago

python连接数据库使用

pymysql库安装

pip install pymysql

python连接数据库

import pymysql
pymysql.connect(host='ip',user='用户名',password='密码',port=端口号(int类型),db='数据库名称')

插入数据

import pymysql
db = pymysql.connect(host='ip',user='用户名',password='密码',port=端口号(int类型),db='数据库名称')
cursor = db.cursor()
sql = 'insert into 表名(...属性) values(%s,%s,%s)'
try:
    cursor.excute(sql,(...属性)) #第二个参数相当于插入value的值,必须是元祖的形式
    db.commit()
except:
    db.roollback()
db.close()

更新数据

import pymysql
db = pymysql.connect(host='ip',user='用户名',password='密码',port=端口号(int类型),db='数据库名称')
cursor = db.cursor()
sql = 'update  表名 set 属性=%s where 属性=%s'
try:
    cursor.excute(sql,(...属性)) #第二个参数相当于插入value的值,必须是元祖的形式
    db.commit()
except:
    db.roollback()
db.close()

插入并更新(插入更新写一起)

import pymysql
db = pymysql.connect(host='ip',user='用户名',password='密码',port=端口号(int类型),db='数据库名称')
cursor = db.cursor()
data = {
    'id':100,
    'name': 'wyc',
    'age': '13'
}
table = '表名',
keys = ','.join(data.keys())
values = ','.join(['%s'] * len(data))
sql = 'insert into {table}({keys}) values({values}) on duplicate key update 空格'
update = ','.join(["{key} = %s".format(key=key) for key in data])
sql += update
 try:
    if cursor.execute(sql,tuple(data.values()) * 2):
        #相当于对'insert into students(id,name,age) values(%s,%s,%s) on duplicate key update id=%s,name=%s,age=%s' 赋值两次
        print("插入或者更新成功")
        db.commint()
    except:
        print("插入或者更新失败")
        db.rollback()
db.close()

删除数据

import pymysql
db = pymysql.connect(host='ip',user='用户名',password='密码',port=端口号(int类型),db='数据库名称')
cursor = db.cursor()
sql = 'delete from {table} where {condition}'
try:
    cursor.excute(sql) 
    db.commit()
except:
    db.roollback()
db.close()

查询数据

import pymysql
db = pymysql.connect(host='ip',user='用户名',password='密码',port=端口号(int类型),db='数据库名称')
cursor = db.cursor()
sql = 'select * from {table} where {condition}'
try:
    #第一种
    cursor.excute(sql) 
    row = cursor.fetchone() #游标指向第一个
    while row:
        print('Row:',row)
        row = cursor.fetchone() #一个一个循环所有的数据
    #第二种
    rows = cursor.fetchall() #所有的行数据相当于迭代器
    for row in rows:
        print(row)
    db.commit()
except:
    db.roollback()
db.close()

封装好的增删改查类

import pymysql

class Mysql():
    def __init__(self,host,user,password,port,db):
        '''
        初始化数据库连接
        :param host: ip地址
        :param user: 账号
        :param password: 密码
        :param port: 端口
        :param db: 数据库名称
        '''
        self.DB = pymysql.connect(host=host,user=user,password=password,port=port,db=db)

    def cursor(self):
        '''
        初始化一个游标
        :return: 数据库游标
        '''
        return self.DB.cursor()

    def commint(self):
        '''
        提交事务
        :return:
        '''
        self.DB.commit()
    def rollback(self):
        '''
        回滚事务
        :return:
        '''
        self.DB.rollback()
    def close(self):
        '''
        关闭连接
        :return:
        '''
        self.DB.close()
    def key(self,data):
        '''
        返回对象的keys
        :param data:对象数据
        :return:
        '''
        return ','.join(data.keys())
    def value(self,data):
        '''
        返回对象的长度的%s
        :param data:对象数据
        :return:
        '''
        return ','.join(['%s'] * len(data))
    def list(self,table,condition=None):
        '''
        数据库表查询
        :param table: 表名
        :param condition: 条件,默认为空
        :return: 查询到的游标
        '''
        try:
            cursor = self.cursor()
            if(condition):
                cursor.execute("select * from {} where {}".format(table,condition))
            else:
                cursor.execute("select * from {}".format(table, condition))
            self.commint()
            return cursor
        except:
            self.rollback()

    def add(self,table,data):
        '''
        插入或更新数据
        :param table: 表名
        :param data: 插入的数据对象即字典
        :return:
        '''
        cursor = self.cursor()
        keys = self.key(data)
        values = self.value(data)
        sql = 'insert into {}({}) values({}) on duplicate key update '.format(table,keys,values)
        update = ','.join(["{key} = %s".format(key=key) for key in data])
        sql += update
        try:
            if cursor.execute(sql,tuple(data.values()) * 2):
                print("插入或者更新成功")
                self.commint()
        except:
            print("插入或者更新失败")
            self.rollback()

    def delete(self,table,condition):
        '''
        删除表数据
        :param table:表名
        :param condition: 条件
        :return:
        '''
        cursor = self.cursor()
        sql = 'delete from {} where {}'.format(table,condition)
        try:
            cursor.execute(sql)
            print("删除成功")
            self.commint()
        except:
            print("删除失败")
            self.rollback()
            
con = Mysql('localhost','root','root',3306,'数据库名')

#查询
# cursor = con.list('user')
# students = cursor.fetchall()
# for i in students:
#     print(i)
# con.close()

# 插入或者更新
# con.add('student',{'id':'6','name':'afasf','age':'14'})

#删除数据
# con.delete('student','id=6')

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

MongoDB安装和python连接 Previous
Python爬虫和正则 Next