使用pymysql首先第一步先在命令行安装该模块(python2中使用的是mysqldb,此方法使用的python3.7)
pip install pymysql
# 导包
import pymysql
# 1.连接数据库
# cursorclass=pymysql.cursors.DictCursor可以使查询出的单条数据数据为字典形式,
多条数据为列表套字典,
db = pymysql.connect(host='localhost', user='root', password='',
database='school',cursorclass=pymysql.cursors.DictCursor)
# 2.创建游标对象
cursor = db.cursor()
# 3.定义SQL语句
# 添加数据
sql = 'insert into students(id,name) values(101,"钟无艳")'
# 4.执行SQL语句
cursor.execute(sql)
# 5.获取返回的结果s
print(cursor.fetchone()) # 只获取一个数据,并且还是个生成器
print(cursor.fetchall()) # 会获取所有数据
db.commit() # 提交,执行了改变数据库的操作,必须提交才会生效,查询可以不加
# 6.断开连接
cursor.close()
db.close()
import pymysql
class MyDB:
# --------------------------------------------------①连接数据库和定义游标
def __init__(self, h='localhost', u='root', p=None, db=None):
self.db = pymysql.connect(host=h, user=u, password=p, database=db,
cursorclass=pymysql.cursors.DictCursor)
self.cursor = self.db.cursor()
#-----------------------------------------------------------②操作
# 查询操作
def select(self, sql):
self.cursor.execute(sql) # 执行sql语句
return self.cursor.fetchall() # 会获取所有数据
# 增删改操作
def change(self, sql):
self.cursor.execute(sql)
self.db.commit() # 提交数据
print('操作成功!')
return self.cursor.rowcount #获取操作的行数
#------------------------------------------------③断开连接
# 自动关闭连接
def __del__(self):
self.cursor.close()
self.db.close()
if __name__ == '__main__':
my = MyDB(db='school')
sql = input('请输入SQl语句:')
print(my.select(sql))
ORM,全称Object Relational Mapping,意为对象关系映射。
①ORM是一个操作数据库的框架
②ORM会将python代码翻译成对应数据库的sql语句
③ORM会将数据库中的表,映射成python中的类
④一张表就是一个类,将表中的字段映射成对象的属性。
优点:使用方便:我们在使用ORM时,可以不关心用的是什么数据库,只专心关心业务逻辑。即使开发人员不会sql语句,也能与数据库进行交互。
缺点:ORM生成的sql语句,不是最优的sql语句,执行效率会比较低。
python中有一个ORM,即sqlalchemy 仿照的是Django框架的ORM。
flask中有一个ORM插件:flask-sqlalchemy
pip install sqlalchemy
4.1创建表
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
# 类似于 pymysql中的游标
from sqlalchemy.orm import sessionmaker
# 1.创建连接
# 数据库类型+数据库操作的包:// 用户名:密码@主机地址/你要操作的数据库
# mysql://scott:tiger@hostname/dbname
db = sqlalchemy.create_engine('mysql://root:@localhost/sqlorm')
# 2.创建基类
base = declarative_base(db)
# 3.创建类 必须继承基类 创建模型
class User(base):
# 表名
__tablename__='user'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32)) # varchar()
age = sqlalchemy.Column(sqlalchemy.Integer)
class Userinfo(base):
__tablename__='userinfo'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
phone = sqlalchemy.Column(sqlalchemy.String(20))
class Shop(base):
__tablename__='shop'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32))
if __name__ == '__main__':
# 执行数据库迁移 创建表
base.metadata.create_all(db)
注意:创建表只会映射一次,创建成功则不会再映射
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
# 类似于 pymysql中的游标
from sqlalchemy.orm import sessionmaker
# 1.创建连接
# 数据库类型+数据库操作的包:// 用户名:密码@主机地址/你要操作的数据库
# mysql://scott:tiger@hostname/dbname
db = sqlalchemy.create_engine('mysql://root:123456@localhost/sqlorm')
# 2.创建基类
base = declarative_base(db)
# 3.创建类 必须继承基类 创建模型
class User(base):
# 表名
__tablename__='user'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32)) # varchar()
age = sqlalchemy.Column(sqlalchemy.Integer)
class Userinfo(base):
__tablename__='userinfo'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
phone = sqlalchemy.Column(sqlalchemy.String(20))
class Shop(base):
__tablename__='shop'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32))
if __name__ == '__main__':
# 执行数据库迁移 创建表
base.metadata.create_all(db)
# 绑定一个实例
# s = sessionmaker(bind=db)
# # 创建回话对象 类似于游标
# session = s()
# 添加
# user = User(name='hello',age=16)
# session.add(user)
# session.commit()
# session.add_all([
# User(name='world',age=1),
# User(name='python',age=28),
# User(name='PHP', age=30),
# ])
# session.commit()
# 查询
# 查询所有的数据 返回一个列表
# res = session.query(User).all()
# for i in res:
# print(i.name,i.age)
# 通过主键查询一条数据 返回一个对象
# res = session.query(User).get(1)
# print(res.name,res.age)
# 条件查询 返回的是一个列表
# res = session.query(User).filter_by(name='hello').all()
# print(res)
# res = session.query(User).filter(User.name=='hello').all()
# print(res)
# 修改数据
# res = session.query(User).get(1)
# print(res.name)
# res.name='HELLO'
# session.commit()
# 删除数据
# res = session.query(User).get(1)
# session.delete(res)
# session.commit()