作者:python与数据分析 链接:https://www.jianshu.com/p/22cb6a4af6d4 Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常普遍的,主要涉及到...支持多种文件格式,可以根据文件的字段自动建表,也可以在已有表中插入数据,非常快捷方便。...场景二:数据是增量的,需要自动化并频繁写入mysql 测试数据:csv 格式 ,大约 1200万行 import pandas as pd data = pd.read_csv('....总结 pymysql 方法用时12分47秒,耗时还是比较长的,代码量大,而 pandas 仅需五行代码就实现了这个需求,只用了4分钟左右。 最后补充下,方式一需要提前建表,方式二则不需要。...最全的三种将数据存入到 MySQL 数据库方法: 直接存,利用 navicat 的导入向导功能 Python pymysql Pandas sqlalchemy
# 我们只需要在配置文件中添加如下配置即可,这里以SQLite为例: app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///"+os.path.join(...: # print(admin_role.id) # 注意,对数据库的操作,都需要:添加到数据库会话管理,然后在提交才会真正的在数据库中修改 # 查询: # 使用query对象中all()方法查询查询相应表中所有记录...,如:User.query.filter_by(role=admin_role).all(),表示返回user表中角色为管理员的数据 # query对象能调用的过滤器有很多,如: # ---------...的,查询结果:[],发现结果为列表形式,自动执行查询all()方法,为了禁止自动查询执行方法,我们可以在Role中的关系定义中加入lazy="dynamic" # users...当我们修改数据库模型后还要自己更新数据库,每次都得删除旧的数据库表重新生成,这样得操作是不可逆得,所以我们是数据库迁移得办法类似与git的版本控制,可以监控数据库做出了那些变化,然后以增量的形式进行更新
True 时,每次请求结束后都会自动提交数据库中的变动。...定义模型 模型这个术语表示程序使用的持久化实体。在 ORM 中,模型一般是一个 Python 类,类中的属性对应数据库表中的列。...backref 参数向 User 模型中添加一个 role 属性,从而定义反向关 系。...更新表的更好方法是使用数据库迁移框架,源码版本控制工具可以跟踪源码文件的变化, 类似地,数据库迁移框架能跟踪数据库模式的变化,然后增量式的把变化应用到数据库中。...,我们就留到后面的内容中慢慢学习吧 这部分完整代码,可以检出5a 总结 本节我们学习了数据库相关的内容,从 SQLAlchemy 到 flask_SQLAlchemy,以及如何在视图函数中使用,还有更加方便的迁移数据库等等知识
这样在插入、更新或删除数据时,MySQL 数据库会自动检查是否符合外键约束条件,从而保证了表之间的数据一致性。...约束可以限制表中某些列的取值范围、必需性、唯一性等,还可以定义表之间的关系,如主键、外键等。 常见的MySQL约束包括: PRIMARY KEY:主键约束,用于唯一标识表中每一行数据。...主键所包含的列必须满足数据每一行都具有唯一性和非空性的条件,主键通常用于对表进行数据的查询、更新和删除操作。在表中,主键是通过具体的列值来定义的,而不是定义在表上的某个独立的约束。...以下是MySQL约束在开发中的应用: 主键约束:可以保证表中每一行数据都有唯一的标识符,而且这个标识符不能为空。主键约束在查询和排序时也能提高性能。...以下是一个示例,展示了如何在FastAPI和MySQL中创建和命名约束: from sqlalchemy import Column, Integer, String, ForeignKey from
,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如: SQLAlchemy用一个字符串表示连接信息: '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'...(engine) if __name__ == '__main__': drop_db() init_db() SQLALchemy不同于Django的ORM,当创建多对多关联事,不会自动创建第三张表...即在查询结果中,显示name的别名'xx' r3 = session.query(Users).filter(Users.name == "alex").one() # one()返回唯一行,类似于...# from sqlalchemy.orm.session import Session # 具有操作数据库的:'close', 'commit', 'connection', 'delete...命令 # 获取当前所在程序目录中涉及到的所有模块,并自动生成 requirements.txt 且写入内容。
ORM FastAPI 可与任何数据库和任何样式的库配合使用并和数据库通信 object-relational mapping 对象关系映射 ORM 具有在代码和数据库表(关系)中的对象之间进行转换(映射...)的工具 使用 ORM,通常会创建一个表示 SQL 数据表的类,该类的每个属性都表示一个列,具有名称和类型 小栗子 Pet 类可以表示 SQL 表 pets 并且 Pet 类的每个实例对象代表数据库中的一行数据...import Base class User(Base): # 1、表名 __tablename__ = "users" # 2、类属性,每一个都代表数据表中的一列...lazy loading 懒加载,即需要获取数据时,才会主动从数据库中获取对应的数据 比如获取属性 ,SQLAlchemy 会从 items 表中获取该用户的 item 数据,但在这之前不会主动获取...) # 2、将实例对象添加到数据库会话 Session 中 db.add(db_user) # 3、将更改提交到数据库 db.commit() # 4、刷新实例,方便它包含来自数据库的任何新数据,
文本类型 LONGTEXT 长文本类型 Integer 整形 Float 浮点类型 Boolean 传递True/False Decimal 具有小数点而且数值确定的数值 Enum 枚举类型 DateTime...是否自动增长 unique 是否唯一 default 默认值 nullable 是否允许为空 onupdate 更新的时候执行的函数 name 该属性在数据库中的字段映射 使用示例 设计一张User...表,我们一般会把id设置为主键,并且设置自增类型,如 id = Column(Integer, primary_key=True, autoincrement=True) 那么这里Column 用到3...执行后,在数据库中生成user表 其中tel是设置的unique 新增数据 测试新增数据 from sqlalchemy.orm import sessionmaker from sqlalchemy...(name='yoyo1', tel='10086', age=20) session.add(obj) # 添加到session session.commit() # 提交到数据库 重复添加相同的
即使在运行中出了错误,或者主机意外关机,我们的已经处理过的数据都不会被破坏。 在python中使用数据库也非常简便,我经常接触的数据库是mysql和sqlite....具体的数据库操作是通过sql语句执行的,仍然需要对mysql语句有较多的了解。...的操作逻辑相似 依然要对sqlite3的语法有所了解 用sqlalchemy做对象映射 sqlalchemy是一个对象映射的库,自动帮我们完成从数据库数据类型到python数据类型对的映射, 从而摆脱对特定...: Base = declarative_base() # 定义User对象: class User(Base): # 表的名字: __tablename__ = 'user'...# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行: user = session.query(User).filter(User.id
这里我们使用的是 mysql ,每一行配置的作用,我均注释在代码后面,配置如下: # encoding: utf-8 # dialect+driver://username:password@host:...class 的名字是 User ,参数是数据库model class User(db.Model): 第二行是数据表的名字,默认情况下 User 类对应数据库中的 user表 ,即将大写字母转换为小写字母的表明...比如 class 的名字是 RepairServiceSheet ,他默认映射的数据库表则是数据库中的 :repair_service_sheet 表。 若不想使用默认的映射呢 ?...我们可以覆盖默认的映射 ,使用 tablename来覆盖即可 ,如:你的 User 类要对应数据库中的 sys_user 表,则使用一下代码 : class User(db.Model): __...(可参照源代码的controllor/user/user.py中的代码) 增:向用户表添加一条数据 user = User(userName='admin', userPassword='123456
在使用SQLite前,我们先要搞清楚几个概念: 表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。...在Python中,最有名的ORM框架是SQLAlchemy。...SQLAlchemy用一个字符串表示连接信息: '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名' 下面,我们看看如何向数据库表中添加一行记录。...由于有了ORM,我们向数据库表中添加一行记录,可以视为添加一个User对象: # 创建session对象: session = DBSession() # 创建新User对象: new_user = User...ORM框架的作用就是把数据库表的一行记录与一个对象互相做自动转换。 正确使用ORM的前提是了解关系数据库的原理。
组件 数据库存储可以抽象为一张表。每行数据都有一些字段对应于数据库的列。每一行的表定义的集合以及每个表的数据类型放到一起定义了数据库的模式(schema)。...往数据库里添加新行叫做插入(insert),修改表中已存在的行叫做更新(update),而移除表中已存在的行叫做删除(delete)、这些动作通常称为数据库命令或操作。...使用可选条件请求获取数据库中的行称为查询(query)。 SQL 数据库命令和查询操作是通过SQL语句提交给数据库的。虽然并非所有数据库都是用SQL语句,但是大多数关系数据库使用。...参数风格 DB-API支持以不同的方式指明如何将参数与SQL语句进行整合,并最终传递给服务器中执行。该参数是一个字符,用于指定构建查询行或命令时使用的字符串替代形式。...=cursor,arraysize]) 获取查询结果的下size行 fetchall() 获取查询结果的剩余所有行 __iter__() 为游标创建迭代器对象 messages 游标执行后从数据库中获得的消息列表
1.2使用SQLite数据库 python中内置的与mysql交互的方法如下: #导入SQLit3 import sqlite3 #连接sqlite3数据库,数据库文件是test.db,如果文件不存在会自动在当前目录中创建...二:MySql 2.1.python中连接MySql #导入mysql驱动 import mysql.connector #连接mysql conn = mysql.connector.connect...3.2.ORM 数据库是个二维表,包含对行多列。...最有名的ORM框架是SQLAlchemy。...添加数据 # 创建session对象: session = DBSession() # 创建User对象 new_user = User(id='5', name='Bob') #添加到session
官网文档 https://flask-sqlalchemy.palletsprojects.com/en/master/quickstart/ 数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中...backref 在关系的另一模型中添加反向引用 primary join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系中记录的排序方式...在准备把数据写入数据库前,要先将数据添加到会话中然后调用commit()方法提交会话。 数据库会话是为了保证数据的一致性,避免因部分更新导致数据不一致。...常用的SQLAlchemy查询过滤器 过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的值限定原查询返回的结果...,如果未查到,返回404 get() 返回指定主键对应的行,如不存在,返回None get_or_404() 返回指定主键对应的行,如不存在,返回404 count() 返回查询结果的数量 paginate
Flask配置对象的 **SQLALCHEMY_DATABASE_URI** 键中 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql...在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提交会话。 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。...python manage.py db init 4.2创建迁移脚本 自动创建迁移脚本有两个函数 upgrade():函数把迁移中的改动应用到数据库中 downgrade():函数则将改动删除 自动创建的迁移脚本会根据模型定义和数据库当前状态的差异...Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性: - 一个应用可以具有多个Blueprint - 可以将一个Blueprint注册到任何一个未使用的URL...3,蓝图的url前缀 - 当我们在应用对象上注册一个蓝图时,可以指定一个url_prefix关键字参数(这个参数默认是/) - 在应用最终的路由表 url_map中,在蓝图上注册的路由URL自动被加上了这个前缀
关系 数据库的设置 学习过web开发的人也许都知道,在web开发中最常用的数据库就是关系模型数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的。...:3306/Flask_test' #设置每次请求结束后会自动提交数据库中的改动 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True #查询时会显示原始...nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 关系 关系型数据库当然得说说关系这个词,关系型数据库就是使用关系把不同表中的行联系在一起...传给db.ForeignKey()的参数‘role.id'表明,这列的值是roles表中的相应行的id值。 从“一”那一端可知,添加到Role模型中的users属性代表这个关系的面向对象吃的视角。...这里给出常用的SQLAlchemy关系选项: 选项名 说明 backref 在关系的另一模型中添加反向引用 primary join 明确指定两个模型之间使用的联结条件 uselist 如果为False
,将面向对象语言程序中的对象自动持久化到关系数据库中。...ORM 好处 避免SQL注入 无需为各个不同的数据写不同的查询语句 坏处 每个具体的语法不一样,但是SQL语句是通用的 学习成本较高 建表 手工建表:先创建,再根据表结构写代码 ORM:先写代码,通过代码自动创建表结构...SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456...创建库 运行之后就在我们本地的mysql数据中创建了user表 ?...import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root
把你的slq(用户输入的)参数 放execute函数的arg参数中 让pymysql 自动帮你屏蔽注入攻击 ORM框架SQLAlchemy SQLAlchemy是Python编程语言下的一款ORM框架...,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如: #1、MySQL-Python mysql+mysqldb://:@[:<port...更多内容,请看官网:TP ---- ORM创建表 类=>表 对象>表中的一行记录 四张表:业务线,服务,用户,角色,利用ORM创建出它们,并建立好它们直接的关系 from sqlalchemy import...会自动帮我们通过foreign key字段去找关联关系 #但是上述查询的结果均为Emp表的字段,这样链表还有毛线意义,于是我们修改为 res=session.query(Emp.id,Emp.ename...,注意:子查询的sql必须用括号包起来,尤其在形式三中需要注意这一点 ## 形式一: #示例:查出id大于2的员工,当做子查询的表使用 #原生SQL: # select * from (select
三、SQLAlchemy ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上。 在Python中,最有名的ORM框架是SQLAlchemy。...创建的user表 #导入 from sqlalchemy import Column, String, create_engine, ForeignKey from sqlalchemy.orm import...由于有了ORM,向数据库表中添加一行记录,可以视为添加一个User对象 #创建session对象 session =DBSsession() #创建新User对象 new_user = User(id=...'5', name='Bob') #添加到session session.add(new_user) #提交即保存到数据库 session.commit() #关闭session 从数据库表中查询数据,...SQLAlchemy提供的查询接口如下 # 创建Session: session = DBSession() # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用
'中的值替换为自己的想要的密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 图形化客户端...任何 Python 对象 自动使用 Pickle 序列化 LargeBinary 任意二进制数据 CRUD操作 Create 插入数据 1.实例化模型类 2.添加新创建的记录到数据库会话 3.提交数据库会话...() 返回查询的第一个结果,如果没有结果,则返回 None count() 返回查询结果的数量 get() 返回指定主键对应的行,如果没有对应的行,则返回 None Update 修改数据 直接赋值给模型类的字段属性就可以改变字段值...id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) 选项名 说明 backref 在关系的另一个模型中添加反向引用...uselist 如果设为 Fales,不使用列表,而使用标量值 order_by 指定关系中记录的排序方式 secondary 指定多对多关系中关系表的名字 secondaryjoin SQLAlchemy
领取专属 10元无门槛券
手把手带您无忧上云