python用orm还是mysql语句好_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数据库

bdaef7acb767f5b3d379d35fd952fc7f.png

1.特点:

对开发人员的要求比较高

开发比较繁琐,sql命令的问题

不利于数据库切换

2.使用前提

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

pip install pymysql

3.连接五步

连接数据库

创建游标

定义sql语句

执行sql语句

关闭连接

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数据库

26c834791c5c29d8e324e051168615d4.png

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.使用五步:

导包

.创建连接

.声明一个基类

创建类–数据模型

操作

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值