先安装 PyMySQL ,接着安装 SQLAlchemy
换源安装
创建数据库引擎
dialect+driver://username:password@host:port/database?charset=utf8
from sqlalchemy import create_engine
HOSTNAME = '127.0.0.1'
DATABASE = 'flask_demo'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
engine = create_engine(DB_URL)
with engine.connect() as conn:
# 执行原生SQL语句
result = conn.execute("select * from students")
# 遍历所有数据
for result in results:
print(result)
如果控制台出现 1366警告 ,那么安装 mysql-connector-python驱动
安装完成后,创建引擎修改为
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
ORM,对象关系映射,即Object Relational Mapping的简称,通过ORM框架将编程语言中的对象模型与数据库的关系模型建立映射关系,这样做的目的:简化sql语言操作数据库的繁琐过程(原生sql的编写及拼接等),转而直接使用对象模型来操作数据库做替代
根据类创建对象,对象转换成SQL,执行SQL。
类对应数据库一张表,属性对应表字段,对象对应一条记录。
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
class Person(Base):
# 创建表结构操作
# 表名
__tablename__ = 'demoTable'
# 字段
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50), nullable=False)
gender = Column(Integer, default=0, comment="1男,2女")
Base.metadata.create_all()
# 映射到数据库
用session来创建和管理数据库连接的会话,这里的session和http中的session不同。
详情请看:关于session的详细介绍
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
session = Session()
add_info = Person(name='Jerry',gender=2)
session.add(add_info)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
session = Session()
result = session.query(Person).all()
for i in result:
print(i)
#
#
#
当查询两条及两条以上数据时,元组方式显示
for i in session.query(Person.name,Person.gender):
print(i)
#('Jerry', 2)
#('Jeem', 1)
#('SeiLi', 2)
得到符合要求的第一条数据
# result = session.query(Person).filter_by(gender=2).all()[0]
result = session.query(Person).filter_by(gender=2).first()
print(result)
利用id 来查询数据
result = session.query(Person).get(3)
# 查询 id=3的数据
print(result)#
# get查询不到id的数据,会返回None
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
session = Session()
result = session.query(Person).filter_by(name='Jerry').first()
session.delete(result)
session.commit()
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
session = Session()
result = session.query(Person).filter_by(name='Merry').first()
result.name = 'Jerry'
session.commit()
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
session = Session()
session.rollback()
Integer:整形
Float:浮点型
DECIMAL:定点型price= Column(DECIMAL(20,2))
两个参数,第一个设置总共多少位,第二个参数设置小数的位数
Boolean:布尔类型,True,False
String:字符型,指定长度
Text:文本类型
LONGTEXT:长文本类型
enum:枚举型gender = Column(Enum('男', '女'))
Date:日期型,传递datetime.date()
Time:时间型,传递 datetime.time()
DateTime:日期时间型,传递datetime.datetime()
create_time = Column(DateTime)
pp = Person(name='LInsan',price=333.2321,gender='男',create_time=datetime(2020,4,21,18,41,33))
result = session.query(func.max(Person.price)).first()
print(result)
==:Person.name == "Jerry"
!=:Person.name != "Jerry"
in :Person.name.in_([ ' Jerry ',' Merry ' ] )
not in :~Person.name.in_([ ' Jerry ',' Merry ' ] )
Person.name.notin_([ ' Jerry ',' Merry ' ] )
like :Person.name.like('%Jee%')
模糊查询,%代表任意个字符
is null : Person.name.is_(None)
not null:Person.name.isnot(None)
与 :and_(Person.name=='Jee',Person.name.gender==2)
Person.name=='Jee',Person.name.gender==2
或 : or_(条件1,条件2)
满足一个条件就可以执行