小福利,flask框架学习笔记(7)--Flask数据库

大家好我是天空之城,今天给大家带来小福利,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)



©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页