import pymysql
from flask import Flask, render_template, flash, request, redirect, url_for
from Book_Info.Book import book
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
pymysql.install_as_MySQLdb()
app = Flask(__name__)
app.secret_key = 'sad'
# 连接 自己的mysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root@localhost:3306/flask_book'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.register_blueprint(book)
db = SQLAlchemy(app)
class Author(db.Model):
__tablename__ = 'authors'
id = db.Column(db.Integer, primary_key=True)
a_name = db.Column(db.String(20))
book = db.relationship('Book', backref='author')
def __repr__(self):
return '<Autor: %s>' % self.a_name
@app.route('/')
def index():
author = Author.query.all()
return Response(author)
if __name__ == '__main__':
# 删除所有的表
# db.drop_all()
# 创建表
# db.create_all()
app.run(debug=True)
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import pymysql
pymysql.install_as_MySQLdb()
app = Flask(__name__)
# 配置数据库的地址mysql://root@localhost:3306/
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root@localhost:3306/falsk_sqlalchemy'
# 跟踪我们数据库的动态, 不建议开启
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# 数据库模型, 需要继承db.Model
# 就是和DJANGO 继承model.Model 一样,不过Django 都是帮你封装好的
class Teacher(db.Model):
''':return 定义表名'''
__tablename__ = 'teacher'
'''创建字段'''
id = db.Column(db.Integer, primary_key=True)
t_name = db.Column(db.String(10))
''' 表示和user模型发生了关联'''
student = db.relationship('Student', backref='teacher')
def __repr__(self):
return '<Teacher: %s %s>' % (self.id, self.t_name)
class Student(db.Model):
__tablename__ = 'student'
id = db.Column(db.Integer, primary_key=True)
s_name = db.Column(db.String(10))
'''__tablename__ .id 创建外键'''
t_id = db.Column(db.Integer, db.ForeignKey('teacher.id'))
def __repr__(self):
return '<Teacher: %s %s %s>' % (self.id, self.s_name, self.t_id)
@app.route('/')
def index():
return '123'
if __name__ == '__main__':
# 删除表
db.drop_all()
# # 创建表
db.create_all()
app.run(debug=True)
In [3]: from app_flask_sqlalchemy import *
# 增
In [4]: teacher = Teacher(t_name='tom')
In [5]: teacher
Out[5]: <Teacher (transient 2347722206656)>
In [6]: db.session.add(teacher)
# 注意增必须要提交commit()
In [7]: db.session.commit()
In [8]: student = Student(s_name='小沫', t_id=1)
In [9]: db.session.add(student)
In [10]: db.session.commit()
# 改
In [11]: student.s_name = 'xiaomo'
# 改不需要add 直接commit() 就可以了
In [12]: db.session.commit()
# 删除 delete
In [13]: db.session.delete(student)
# 需要commit()
In [14]: db.session.commit()
# 查询所有的老师
Teacher.query.all()
# 查询有多少老师
Teacher.query.count()
# 查询第一条数据
Teacher.query.first()
# 查询id 为 4 的数据
Teacher.query.get(4)
# 第二种写法
Teacher.query.filter_by(id=4).first()
# 第三种写法
Teacher.query.filter(Teacher.id==1).first()
# filter 和 filer_by
filter 功能更加强大, 能查询更多的条件

from sqlalchemy import create_engine
from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import sqlite3
'''
flask 使用SQLAlchemy
- SQLAlchemy 就是关系对象映射(orm) 说简单的一点就是将你的sql语句转换为orm语句。
- SQLAlchemy 简单来说就是表和表之间的关系(一对一, 一对多, 多对多)映射到表中,然后我们的框架只需要在你的对象层操作就可以了
- 相对sql 而言 orm 的语法更为简单,灵活,开发效率高,有的时候也会使用sql, 就比如在查询复杂的场景,使用sql语句
'''
'''
安装 flask flask-sqlalchemy 的扩展包
pip install flask-sqlalchemy
SQLAlchemy 通过engine(引擎) 去选择数据
'''
DB_FILES = 'db/database.sqlite3'
engine = create_engine('sqlite:///' + DB_FILES, echo=True)
# 创建模型基类
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
name = Column('username', String(100), primary_key=True)
password = Column('password', String(100))
email = Column('email', String(100))
if __name__ == '__main__':
Base.metadata.create_all(engine)
def find_all():
Session = sessionmaker(bind=engine)
session = Session()
list = session.query(User).all()
list2 = []
for user in list:
dic = {}
dic['username'] = user.username
dic['password'] = user.password
dic['eamil'] = user.eamil
list2.append(dic)
session.close()
# 创建数据库连接对象
conn = sqlite3.connect(DB_FILES)
try:
cursor = conn.cursor()
sql = 'SELECT username, password, email FROM users'
cursor.execute(sql)
# 提前游标数据
result_set = cursor.fetchall()
for row in result_set:
dic = {}
dic['username'] = row[0]
dic['password'] = row[1]
dic['eamil'] = row[2]
list.append(dic)
print('数据库查询成功')
except:
print('数据库查询失败')
finally:
conn.close()
return list2
flask sqlalchemy基本介绍