python连接mysql数据库

 

 

在控制台显示查询结果

 

这里是因为访问了两次添加数据的地址,执行了两次添加函数 

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函数
    # 我的理解是会话是预执行,可以一次性提交,可以把获取的每一个对象都理解成一个字典

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值