#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat ''' sqlalchemy是一款orm框架 注意:SQLAlchemy本身是无法处理数据库的,必须依赖于第三方插件,比方说pymysql,cx_Oracle等等 SQLAlchemy等于是一种更高层的封装,里面封装了许多dialect(相当于是字典),定义了一些组合,比方说: 可以用pymysql处理mysql,也可以用cx_Oracle处理Oracle,关键是程序员使用什么 然后会在dialect里面进行匹配,同时也将我们高层定义的类转化成sql语句,然后交给对应的DBapi去执行。 除此之外,SQLAlchemy还维护一个数据库连接池,数据库的链接和断开是非常耗时的 SQLAlchemy维护了一个数据库连接池,那么就可以拿起来直接用 ''' from sqlalchemy import Column, String, Integer, create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base # 创建对象的基类,我们定义的类一定要继承Base Base = declarative_base() # 定义User对象 class User(Base): # 定义表的名字,与User没有关系 __tablename__ = "东方project" # 表的结构 name = Column(String(length=30), primary_key=True) # 定义一个name字段,字符串类型,最大长度为30个字节,并设置为主键 age = Column(Integer) # 定义年龄字段,整数类型 gender = Column(String(1)) # 定义性别字段,最大长度为一个字节 # 初始化数据连接 # 格式很固定,哪怕不是mysql也可以按照这个结果去写 # 格式:create_engine("数据库类型+数据库驱动://用户名:密码@ip:端口/数据库名") engine = create_engine("mysql+pymysql://root:zgghyys123@localhost:3306/satori?charset=utf8") # 对数据库进行表的建立,会将继承了Base的类在数据库中映射成表 Base.metadata.create_all(engine) # 创建DBsession,绑定创建的引擎,以后就往引擎里定义的数据库里添加或修改记录 DBsession = sessionmaker(bind=engine) # 因此有了ORM,当我们往数据库添加一条记录,可以看做添加一个User对象 # 创建session对象 session = DBsession() # 创建三个User对象 user1 = User(name="古明地盆", age=18, gender="f") user2 = User(name="十六夜", age=18, gender="f") user3 = User(name="芙兰朵露斯卡雷特", age=400, gender="f") # 将对象添加到session中 session.add(user1) session.add(user2) session.add(user3) # 将session中的对象提交到数据库 session.commit() # 关闭session session.close() # 因此,关键是获取session,然后创建类(相当于创建表),生成对象。 # 然后将对象添加到session当中,再由session进行提交,最后关闭session # 获取session,需要DBsession,DBsession对象相当于数据库连接,因为DBsession中绑定了引擎
可以看到表被创建了,内容也添加进来了。
如何查询内容
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat from sqlalchemy import Column, String, Integer, create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base # 创建对象的基类,我们定义的类一定要继承Base Base = declarative_base() # 定义User对象 class User(Base): # 定义表的名字,与User没有关系 __tablename__ = "东方project" # 表的结构 name = Column(String(length=30), primary_key=True) age = Column(Integer) gender = Column(String(1)) engine = create_engine("mysql+pymysql://root:zgghyys123@localhost:3306/satori?charset=utf8") DBsession = sessionmaker(bind=engine) session = DBsession() # all()查询所有,得到一个包含所有对象的列表,one()查询一条,得到一个对象 # 我们这里只有一个对象 user = session.query(User).filter(User.name=="古明地盆").one() print(type(user)) print(user.name) print(user.age) print(user.gender) ''' <class '__main__.User'> 古明地盆 18 f ''' # 可以看到数据被打印了出来