MYSQL(九):通过python连接MySQL数据库的两种方法:pymysql和sqlalchemy

文章目录

  • 一、使用pymysql连接MySQL数据库
    • 1.特点:
    • 2.使用前提
    • 3.连接五步
    • 4.面向过程连接方法
    • 5.封装后,面向对象连接方法
  • 二、使用ORM操作MySQL数据库
    • 1.熟悉ORM
    • 2.使用前提
    • 3.使用五步:
    • 4.使用ORM连接MySQL
    • 4.2创建表并且操作表

一、使用pymysql连接MySQL数据库

MYSQL(九):通过python连接MySQL数据库的两种方法:pymysql和sqlalchemy_第1张图片

1.特点:

  • 对开发人员的要求比较高
  • 开发比较繁琐,sql命令的问题
  • 不利于数据库切换

2.使用前提

使用pymysql首先第一步先在命令行安装该模块(python2中使用的是mysqldb,此方法使用的python3.7)

pip install pymysql

3.连接五步

  1. 连接数据库
  2. 创建游标
  3. 定义sql语句
  4. 执行sql语句
  5. 关闭连接

4.面向过程连接方法

# 导包
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()

5.封装后,面向对象连接方法

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操作MySQL数据库

MYSQL(九):通过python连接MySQL数据库的两种方法:pymysql和sqlalchemy_第2张图片

1.熟悉ORM

ORM,全称Object Relational Mapping,意为对象关系映射。
①ORM是一个操作数据库的框架
②ORM会将python代码翻译成对应数据库的sql语句
③ORM会将数据库中的表,映射成python中的类

④一张表就是一个类,将表中的字段映射成对象的属性。

优点:使用方便:我们在使用ORM时,可以不关心用的是什么数据库,只专心关心业务逻辑。即使开发人员不会sql语句,也能与数据库进行交互。

缺点:ORM生成的sql语句,不是最优的sql语句,执行效率会比较低。

python中有一个ORM,即sqlalchemy 仿照的是Django框架的ORM。
flask中有一个ORM插件:flask-sqlalchemy

2.使用前提

pip install sqlalchemy

3.使用五步:

  1. 导包
  2. .创建连接
  3. .声明一个基类
  4. 创建类–数据模型
  5. 操作

4.使用ORM连接MySQL

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)

注意:创建表只会映射一次,创建成功则不会再映射

4.2创建表并且操作表

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()



你可能感兴趣的:(Mysql数据库,python,mysql,orm)