python--SQLAlchemy

#!/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
'''
# 可以看到数据被打印了出来

猜你喜欢

转载自www.cnblogs.com/traditional/p/9222440.html