SQLAlchemy讲解

1.0 SQLAIchemy的作用

SQLAIchemy是一个数据库ORM框架,安装命令为

pip install SQLAIchemy
#mysql下载,ubuntu
sudo apt-get install mysql-server libmysqlclient-dev-yq
#pymysql下载
pip install pymysql

2.0 通过SQLAIchemy连接数据库

from sqlalchemy import create_engine

#地址
HOSTNAME = '127.0.0.1'

#端口
PORT = '3306'

#用户名
USERNAME = 'root'

#密码
PASSWORD = 'root'

#数据库名
DATABASE = 'flask_demo'

DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)

#创建数据库引擎
engine = create_engine(DB_URL)

#建立数据库连接
with engine.connect() as conn:
    resulut = conn.execute('select * from first_table where id=2')
    # print(resulut)
    print(resulut.fetchone()) #查询数据,默认查询第一条

重点::::::
create_engine()中需要传入一个满足某种格式的字符串,对这个字符串的格式来进行解释

dialect+driver://username:password@host:port/database?charset=utf8
#dialect是数据库的实现,如Mysql、SQlite, driver是python对应的驱动,如果不指定,则选择默认的驱动,username是连接数据库的用户名,password是连接的密码,host是连接数据库的域名,post是数据库监听的端口号,database是连接的数据库名字。

3.0 ORM介绍

随着项目越做越大,采用原生SQL语句,会在项目中产生大量的sql语句,对项目不利
原生SQL语句的缺点:

  1. SQL语句重复率高,利用率不高
  2. 很多SQL语句是在逻辑中拼凑出来的,当需要修改是,可能需要修改很多条数据。
  3. 容易忽略web安全问题

ORM:
对象关系映射
通过ORM我们可以以类的方式去操作数据库,通过把表映射成类,行做实例,字段做属性,在执行对象操作时,还是会把对应的操作转换为原生SQL语句
ORM优点

  1. 易用性高,有效的减少SQL语句
  2. 性能损耗小
  3. 设计灵活,可以轻松写出复杂的查询
  4. 可移植性,,SQLAIchemy封装了底层的数据库实现,支持多个关系型数据库,Mysel,SQLite

4.0 使用ORM来操作数据库

要使用ORM来操作数据库,需要创建一个类来以对应的表进行映射。

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


USERNAME = 'root'
PASSWORD = 'root'
HOSTNAME = '127.0.0.1'
PORT = 3306
DATABASE = 'flask_demo'

DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

engine = create_engine(DB_URL)

#继承基类
Base = declarative_base(engine)

class Base_ji(Base):
    __tablename__ = 'books1'

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(50), nullable=False)
    content = Column(String(50))
    author = Column(String(50))
    def __str__(self):
        return 'Base_ji(name:{}, content:{}, author:{})'.format(self.name, self.content, self.author)

#ORM框架增删改查
# Base.metadata.create_all()  #映射到数据库
#和数据库打交道的是一个叫Session的对象
Session = sessionmaker(bind=engine)
session = Session()

#新建一个函数增
def add_data():
    books1 = Base_ji(name='python', content='人生苦短,我用python', author='龟叔')
    #把数据添加到session中,这时并没有存储到数据库中
    session.add(books1)
    #提交到数据库,在提交前所有操作都是在事务中进行的
    session.commit()

#新建一个函数查
def search_data():
    **#查询所有,query相当于一个数组,它返回的是一个query对象,可以进行迭代,如果传的是一个类名,那提取出来的数据就都是是这个类的实例,如果传递的是类的属性,那么查出来的就是元祖。**
    # data = session.query(Base_ji).all()
    #条件查询
    # data = session.query(Base_ji).filter(Base_ji.name == 'php').all()
    #filter_by查询,赋值方式查询
    # data = session.query(Base_ji).filter_by(name = 'php').all()
    #查询首条数据
    data = session.query(Base_ji).first()
    #查询第二条数据
    data = session.query(Base_ji).get(3)
    # for item in data:
        # print(item.name)
        # print(item.content)
        # print(item.author)
    print(data)

#改
def update_data():
    data = session.query(Base_ji).first()
    data.name = '逻辑教育'
    #回滚
    session.rollback()
    print(data.name)
    session.commit()
#删除
def delete_data():
    data = session.query(Base_ji).first()
    session.delete(data)
    session.commit()
    print(data)

if __name__ == '__main__':
    # add_data()
    # search_data()
    update_data()
    # delete_data()

你可能感兴趣的:(SQLAlchemy讲解)