大家好我是天空之城,今天给大家带来小福利,flask框架学习笔记(5)–Flask数据库
数据库的连接
from flask import Flask
from sqlalchemy import create_engine
# 连接数据库
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
# 几栋
DATABASE = 'classes'
# 端口
# 门牌号
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:
resulut = conn.execute('select * from first_class')
# print(resulut)
print(resulut.fetchall())
表格的操作
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
# 连接数据库
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
# 几栋
DATABASE = 'classes'
# 端口
# 门牌号
PORT = 3306
# 用户名和密码
# 钥匙
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
# 都要继承这个函数生成的基类
Base = declarative_base(engine)
class Students(Base):
__tablename__ = 'students'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50), nullable=False)
gender = Column(Integer, default=1, comment='1为男,2为女')
# 模型映射到数据库中
Base.metadata.create_all()
-----------------------------------------------------------------------
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DECIMAL, Boolean, Enum, DateTime
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.orm import sessionmaker
from datetime import datetime
from sqlalchemy import func
import random
# 连接数据库
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
# 几栋
DATABASE = 'classes'
# 端口
# 门牌号
PORT = 3306
# 用户名和密码
# 钥匙
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
# 都要继承这个函数生成的基类
Base = declarative_base(engine)
class User(Base):
__tablename__ = 'user1'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50), nullable=False)
price = Column(DECIMAL(20, 5), nullable=False)
def __str__(self):
return 'User(title:{}, price:{})'.format(self.title, self.price)
# Base.metadata.create_all()
Session = sessionmaker(bind=engine)
session = Session()
#
# for i in range(6):
# user = User(title='title%s' % i, price=random.randint(1, 100))
# session.add(user)
#
# session.commit()
# users = session.query(User).all()
# print(users)
# for user in users:
# print(user.title)
# result = session.query(func.count(User.id))
# print(result)
result = session.query(func.avg(User.price)).all()
print(result)
"""
func.count:统计行的数量。
func.avg:求平均值。
func.max:求最大值。
func.min:求最小值。
func.sum:求和。
-------------------------------------------------
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DECIMAL, Boolean, Enum, DateTime
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.orm import sessionmaker
from datetime import datetime
# 连接数据库
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
# 几栋
DATABASE = 'classes'
# 端口
# 门牌号
PORT = 3306
# 用户名和密码
# 钥匙
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
# 都要继承这个函数生成的基类
Base = declarative_base(engine)
"""
Integer:整形。
Float:浮点类型。
Boolean:传递True/False进去。
DECIMAL:定点类型。
enum:枚举类型。
Date:传递datetime.date()进去。 2020 10 28
DateTime:传递datetime.datetime()进去。 2020 10 28 21 36 21
Time:传递datetime.time()进去。 21 36 21
String:字符类型,使用时需要指定长度,区别于Text类型。
Text:文本类型。
LONGTEXT:长文本类型。
"""
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50))
price = Column(DECIMAL(20, 5))
is_delete = Column(Boolean)
# 枚举
gender = Column('sex', Enum('男', '女'))
create_time = Column(DateTime)
content = Column(LONGTEXT)
update_time = Column(DateTime, onupdate=datetime.now())
# 模型映射到数据库中
Base.metadata.drop_all()
Base.metadata.create_all()
Session = sessionmaker(bind=engine)
session = Session() # 这样就可以调用类中的__call__方法
user = User(name='cheney', price=10.123, is_delete=False, gender='男', create_time=datetime(2020, 10, 28, 21, 38), content='xxxxxxxxxxxxxxxxx', update_time=None)
session.add(user)
data = session.query(User).first()
data.name = 'logic'
print(data.name)
session.commit()
"""
default:默认值。 当你设置了default=xxx的时候,你如果没有传递这个数据,那么数据库会显示你设置 的这个值
nullable:是否可空。 nullable=False 表示不能为空
primary_key:是否为主键。
unique:是否唯一。 当你设置了这个参数的时候,那么统一列的数据不能相同,相同就报错
autoincrement:是否自动增长。
onupdate:更新的时候执行的函数。
name:该属性在数据库中的字段映射
"""
-------------------------------------------------------------------------
数据的过滤
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
# 连接数据库
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
# 几栋
DATABASE = 'classes'
# 端口
# 门牌号
PORT = 3306
# 用户名和密码
# 钥匙
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
# 都要继承这个函数生成的基类
Base = declarative_base(engine)
class Article(Base):
__tablename__ = 'article1'
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 'Article(name:{}, content:{}, author:{})'.format(self.name, self.content, self.author)
# 模型映射到数据库中
# Base.metadata.create_all()
Session = sessionmaker(bind=engine)
session = Session() # 这样就可以调用类中的__call__方法
#
# 增加数据
def add_data():
article = Article(name='Python', content='人生苦短,我用Python', author='龟叔')
session.add(article)
session.commit()
# 查询数据
def search_data():
# 查询所有
# data = session.query(Article).all()
# filter查询
# data = session.query(Article).filter(Article.name == 'java', is_delete==0).all()
# filter_by
# data = session.query(Article).filter_by(name='java').all()
# 查询第一条数据
# data = session.query(Article).last()
# 查询第二条数据
data = session.query(Article).get()
# for item in data:
# print(item.name)
# print(item.content)
# print(item.author)
print(data)
def update_data():
data = session.query(Article).first()
data.name = 'lgcode'
# 回滚
session.rollback()
print(data.name)
session.commit()
def delete_data():
data = session.query(Article).first()
session.delete(data)
session.commit()
if __name__ == '__main__':
# add_data()
# search_data()
update_data()
# delete_data()
---------------------------------------------
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
# 连接数据库
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
# 几栋
DATABASE = 'classes'
# 端口
# 门牌号
PORT = 3306
# 用户名和密码
# 钥匙
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
# 都要继承这个函数生成的基类
Base = declarative_base(engine)
class Article(Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50), nullable=False)
gender = Column(Integer, default=1, comment='1为男,2为女')
# 模型映射到数据库中
# Base.metadata.create_all()
article = Article(name='cheney')
article1 = Article(name='jerry')
Session = sessionmaker(bind=engine)
session = Session() # 这样就可以调用类中的__call__方法
#
session.add_all([article, article1])
session.commit()
# print(article.name)
# print(article.id)
# print(article.gender)