一、ORM技术(对象关系映射)简介
如果从数据库查到几条数据,需要在Python中表示出来,如果没学ORM技术,则会使用tuple表示,因为tuple类型的数据不可变。也可以通过类的形式体现出来。
1、ORM思想:每张表都会有一个对应的类。类的属性和表的字段一一对应。
示例(通过类体现数据库)
二、SQLAlchemy 的安装 与 初始化连接
1、在Windows 环境下的pycharm 点击 Terminal 输入 pip install SQLAlchemy
2、打开虚拟机,进入MySQL 创建对应的库 sqlalchemy 并授权
[root@JSH-01 ~]# mysql -uroot -p123456
mysql> create database sqlalchemy;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
3、初始化连接 sqlalchemy 语法结构如下:
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:123456@192.168.6.137/sqlalchemy',echo=True)
print(engine)
命令解析:
create_engine()返回一个Engine的实例,并且它表示通过数据库语法处理细节的核心接口,在这种情况下,数据库语法将会被解释成python的类方法。
mysql+pymysql://root@123456@192.168.6.137/sqlalchemy 其中root是数据库的用户名,123456是密码;192.168.6.137 为数据库的IP地址;sqlalchemy 需要连接的库名。
echo参数为True时,会显示每条执行的SQL语句,可以关闭;
运行结果:
三、SQLAlchemy 的操作使用
1、通过SQL语句创建表格
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:123456@192.168.37.128/sqlalchemy',echo=True)
print(engine)
cus = engine.connect() #类似于创建SQL游标
sql = '''create table student(id int not null,name VARCHAR(100),age int,address VARCHAR(100))'''
cus.execute(sql)
cus.close()
2、通过ORM方式创建表格
from sqlalchemy import create_engine
from sqlalchemy import Table
from sqlalchemy import Integer
from sqlalchemy import Column
from sqlalchemy import String
from sqlalchemy import MetaData
engine = create_engine('mysql+pymysql://root:123456@192.168.37.128/sqlalchemy') #创建与数据库的连接
metadata = MetaData(engine) #绑定数据源
user = Table("user",metadata,
Column("id",Integer,primary_key=True),
Column("name",String(100)),
Column("tel",String(15)),
)
metadata.create_all(engine)
按照如上语句创建的表,相关参数如下:
① MetaData类:主要用于保存表结构,连接字符串等数据,是一个多表共享的对象。
② 创建与数据库的连接
engine = create_engine('mysql+pymysql://root:123456@192.168.37.128/sqlalchemy')
③ 绑定数据源
metadata = MetaData(engine)
④ 创建表(安全操作模式:即先判断该表是否存在;如果存在则不创建,如果不存在则创建)
metadata.create_all(engine)
⑤ Table类的构造函数 Table_ _init _ _(self, name, metadata, *args, **kwargs)
其中 name 定义表的名字; metadata 数据源;*args中的 Column类 定义表格中的列。
⑥Column类的构造函数 Column_ _init _ _(self, name, type_, *args, **kwargs)
其中 name 定义列的名字;type_ 类型(详见 sqlalchemy.types);
primary_key 如果为true 则该字段为主键。