在控制台显示查询结果
这里是因为访问了两次添加数据的地址,执行了两次添加函数
python代码
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
from sqlalchemy import text
app = Flask(__name__)
HOSTNAME = 'localhost'
# HOSTNAME = '127.0.0.1',这俩就是一样的
PORT = 3306
USERNAME = 'root'
PASSWORD = '******'
DATABASE = 'kafka'
app.config[
'SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
db = SQLAlchemy(app)
with app.app_context():
# with app.app_context():就是应用上下文,这里必须要有,整个项目可以有多个
with db.engine.connect() as conn:
rs = conn.execute(text("select * from s"))
# text是必要的,这里似乎和sqlite3数据库那边有所不同,那边可以直接execute执行
for i in rs.fetchall():
print(i)
class Flask_one(db.Model):
__tablename__ = 'flask_one'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(100), nullable=False)
password = db.Column(db.String(100), nullable=False)
# db.String(100)会映射成varchar(100),db.Integer就是int,nullable=False就是不为空
# autoincrement=True就是这个int类型会自增,
with app.app_context():
db.create_all()
# 这里的把全部orm模型类映射成mysql的对应数据库中的表,表名就是__tablename__,
# db.Model是所有的orm模型类的父类,必须直接或间接继承,类属性经过db.Column对象方法的赋值才能被映射成同名字段
# 我才发现这个app_id等这种后面的变量不在绑定的函数中用的话就会报错(不是形参就报错)
# 我发现连接同一个手机热点的多个设备,用的路由是一样的,这多个设备也都可以ping通这路由,但是不能互相ping通
# 当然,这多个设备都可以直接ping通这个手机的ip地址,
# 所以当我用手机热点给这个电脑连接的时候,(本来一般在同一个局域网就能互相访问)就可以用手机访问这个设置了host=‘0.0.0.0’的flask程序,当然要在电脑ip后面加上 :对应端口号
# 并且还可以修改保存,我在博客上已经验证过了,那个不同的手机热点连接下,电脑ip是不同的,由此形成的访问地址也不同,但是连接这个热点的另一个设备不能访问
@app.route("/flask_one/add")
def flask_one_add():
flask_one1 = Flask_one(username="法外狂徒张三", password="123456")
flask_one2 = Flask_one(username="美好的菇凉", password="123456")
flask_one3 = Flask_one(username="局域网下的爱情", password="123456")
db.session.add(flask_one1)
db.session.add(flask_one2)
db.session.add(flask_one3)
db.session.commit()
return "美女注册成功了"
@app.route("/flask_one/query1")
def flask_one_query1():
flask_user = Flask_one.query.get(1)
#通过主键查找返回唯一一行数据也就是一个对象
print(f"{flask_user.username}- {flask_user.password}-{flask_user.id}")
return "数据查询1成功"
@app.route("/flask_one/query2")
def flask_one_query2():
flask_query=Flask_one.query.filter_by(password=123456)
for i in flask_query:
print(f"{i.id}-{i.password}-{i.username}")
return "数据查询2陈工"
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0', port=5000)
# 数据库的会话回滚操作就是,撤销当前会话中所有未提交的事务,事务就是一堆有联系的要么一起执行成功,要么一起执行失败的sql语句,mysql中是用ROLLBACK函数
# 我的理解是会话是预执行,可以一次性提交,可以把获取的每一个对象都理解成一个字典