本文最后更新于:4 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 协议 ,转载请注明出处!