当前位置: 首页 > news >正文

同行做的好的网站响应式网站是什么意思

同行做的好的网站,响应式网站是什么意思,丘里奇网站排名,手机wordpress后台FastAPI可以和任何数据库和任意样式的库配合使用#xff0c;这里看一下使用SQLAlchemy的示例。下面的示例很容易的调整为PostgreSQL#xff0c;MySQL#xff0c;SQLite#xff0c;Oracle等。当前示例中我们使用SQLite ORM对象关系映射 FastAPI可以与任何数据库在任何样式…FastAPI可以和任何数据库和任意样式的库配合使用这里看一下使用SQLAlchemy的示例。下面的示例很容易的调整为PostgreSQLMySQLSQLiteOracle等。当前示例中我们使用SQLite ORM对象关系映射 FastAPI可以与任何数据库在任何样式的库中一起与数据库进行通信。一种常见的模式就是“ORM”:对象关系映射。所谓对象关系映射就是ORM具有在代码和数据库表(“关系型”)中的对象中间转换(“映射”)的工具。即使用ORM在SQL数据库创建一个代表映射的类该类的每个数据代表数据表中的一个列具有名称和类型。约定俗成类使用大写如Pet代表SQL为表的pets该累的每个实例对象标识数据库中的一行数据。比如一个对象orion_catPet的一个实例可以有一个属性orion_cat.type, 对标数据库中的type列。并且该属性的值可以是其它例如cat 文件结构 假设有个fastapi_sqlalchemy的项目其下有一个包为sql_app结构如下所示 fastapi_sqlalchemy ├── sql_app │ ├── __init__.py │ ├── crud.py │ ├── database.py │ ├── main.py │ ├── models.py │ ├── requirements.txt │ └── schemas.py └── sql_app.db 既然是sql_app包肯定少不了__init__.py这里的初始化函数为空。其中依赖requirement.txt中为 fastapi0.111.0 pydantic2.7.4 SQLAlchemy2.0.30这里使用的SQLAlchemy 为2.0以上版本如果使用v1则有些语法不同。 创建SQLAlchemy部件 首先看一下sql_app/database.py 创建SQLAlchemy引擎和初始化Base类 # File : database.py from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmakerSQLALCHEMY_DATABASE_URL sqlite:///./sql_app.db # SQLALCHEMY_DATABASE_URL postgresql://user:passwordpostgresserver/db# 来允许SQLite这样 engine create_engine(SQLALCHEMY_DATABASE_URL, connect_args{check_same_thread: False} )SessionLocal sessionmaker(autocommitFalse, autoflushFalse, bindengine)# 用于建立数据库SQLAlchemy模型models Base declarative_base() 创建一个SQLAlchemy 引擎其中connect_args{“check_same_thread”: False} 仅用于SQLite其他数据库不需要 。 默认情况下SQLite 只允许一个线程与其通信假设有多个线程的话也只将处理一个独立的请求。这是为了防止意外地为不同的事物不同的请求共享相同的连接。但是在 FastAPI 中使用普通函数def时多个线程可以为同一个请求与数据库交互所以我们需要使用connect_args{“check_same_thread”: False}来让SQLite允许这样。 此外我们将确保每个请求都在依赖项中获得自己的数据库连接会话因此不需要该默认机制。 连接到一个SQLite数据库该文件在当前目录下的sql_app.db中 创建SessionLocal的时候每个 SessionLocal 的类的实例都是一个数据库会话当然该类本身还不是数据库会话。但是一旦我们创建了一个SessionLocal类的实例这个实例将是实际的数据库会话。我们将它命名为SessionLocal是为了将它与我们从 SQLAlchemy 导入的Session区别开来。稍后我们将使用Session从 SQLAlchemy 导入的那个。要创建SessionLocal类请使用函数sessionmaker Base declarative_base()在后面的会继承这个Base类来创建每个数据库模型或者类ORM模型 创建数据库模型models 在文件sql_app/models.py中使用上一步创建的Base类派生子类来创建SQLAlchemy模型。 SQLAlchemy中的“模型”指的的是和数据库交互的类和实例Pydantic中的“模型”指的是不同的东西即数据验证、转换以及文档类和实例 # File : models.pyfrom sql_app.database import Basefrom sqlalchemy import Boolean, Column, ForeignKey, Integer, String from sqlalchemy.orm import relationshipclass User(Base):__tablename__ usersid Column(Integer, primary_keyTrue) # primary_key 为True标识主键email Column(String, uniqueTrue, indexTrue) # unique 如果为True表示这列不允许出现重复的值,indexTrue为这列创建索引提升查询效率hashed_password Column(String)is_active Column(Boolean, defaultTrue) # defaultTrue 为这列设置默认值items relationship(Item, back_populatesowner)class Item(Base):__tablename__ itemsid Column(Integer, primary_keyTrue)title Column(String, indexTrue)description Column(String, indexTrue)owner_id Column(Integer, ForeignKey(users.id))owner relationship(User, back_populatesitems) 这个__tablename__属性是用来告诉 SQLAlchemy 要在数据库中为每个模型使用的数据库表的名称使用Column来表示 SQLAlchemy 中的默认值。传递一个 SQLAlchemy “类型”如Integer、String和Boolean它定义了数据库中的类型作为参数以及其他限定。这些属性中的每一个都代表其相应数据库表中的一列关系或者说内联外联的关系使用relationship,当访问 user 中的属性items时如 中my_user.items它将有一个ItemSQLAlchemy 模型列表来自items表这些模型具有指向users表中此记录的外键。当您访问my_user.items时SQLAlchemy 实际上会从items表中的获取一批记录并在此处填充进去。同样当访问 Item中的属性owner时它将包含表中的UserSQLAlchemy 模型users。使用owner_id属性/列及其外键来了解要从users表中获取哪条记录 创建Pydantic模型 接下来看看sql_app/shchemas.py 为了避免 SQLAlchemy模型和 Pydantic模型之间的混淆我们将有models.pySQLAlchemy 模型的文件和schemas.py Pydantic 模型的文件。这些 Pydantic 模型或多或少地定义了一个“schema”一个有效的数据形状。因此这将帮助我们在使用两者时避免混淆。 创建初始化Pydantic模式/模型 创建一个ItemBase和UserBase Pydantic模型或者我们说“schema”他们拥有创建或读取数据时具有的共同属性。然后创建一个继承自他们的ItemCreate和UserCreate并添加创建时所需的其他数据或属性。因此在创建时也应当有一个password属性。但是为了安全起见password不会出现在其他同类 Pydantic模型中例如通过API读取一个用户数据时它不应当包含在内。 # File : schemas.py from pydantic import BaseModelclass ItemBase(BaseModel):title: strdescription: str | None Noneclass UserBase(BaseModel):email: strclass ItemCreate(ItemBase):passclass Item(ItemBase):id: intowner_id: intclass Config:# orm_mode Truefrom_attributes Trueclass UserCreate(UserBase):password: strclass User(UserBase):id: intis_active: boolitems: list[Item] []class Config:# orm_mode True# 解决pydantic/_internal/_config.py:334: UserWarning: Valid config keys have changed in V2:# * orm_mode has been renamed to from_attributesfrom_attributes True 先介绍下Config类的作用 class Config:# orm_mode Truefrom_attributes True如果是Pydantic 是v1版本则使用ormTrue, 本机环境安装的是v2版本。这个类是一个Pydantic配置项。orm_mode或者from_attributes 会告诉Pydantic模型读取数据而不仅仅是字典而是一个ORM模型或者说一个具有属性的对象。这样而不是仅仅试图从dict上 id 中获取值如下所示 id data[id]它还会尝试从属性中获取它如 id data.id 有了这个Pydantic模型与 ORM 兼容您只需在路径操作response_model的参数中声明它即可。将能够返回一个数据库模型它将从中读取数据 SQLAlchemy 风格和 Pydantic 风格¶ 请注意SQLAlchemy模型使用 来定义属性并将类型作为参数传递给Column例如 name Column(String)虽然 Pydantic模型使用: 声明类型但新的类型注释语法/类型提示是 name: str请牢记这一点这样您在使用:还是时就不会感到困惑 CRUD工具 现在让我们看看文件sql_app/crud.py。在这个文件中我们将编写可重用的函数用来与数据库中的数据进行交互。 CRUD分别为增加Create、查询Read、更改Update、删除Delete即增删改查。 …虽然在这个例子中我们只是新增和查询。 读取数据¶ 从 sqlalchemy.orm中导入Session这将允许您声明db参数的类型并在您的函数中进行更好的类型检查和完成。导入之前的modelsSQLAlchemy 模型和schemasPydantic模型/模式。 创建一些工具函数来完成 通过 ID 和电子邮件查询单个用户。查询多个用户。查询多个项目 # File : crud.py from sqlalchemy.orm import Sessionfrom sql_app import models, schemasdef get_user(db: Session, user_id: int):return db.query(models.User).filter(models.User.id user_id).first()def get_user_by_email(db: Session, email: str):return db.query(models.User).filter(models.User.email email).first()def get_users(db: Session, skip: int 0, limit: int 100):return db.query(models.User).offset(skip).limit(limit).all()def create_user(db: Session, user: schemas.UserCreate):fake_hashed_password user.password notreallyhasheddb_user models.User(emailuser.email, hashed_passwordfake_hashed_password)db.add(db_user)db.commit()db.refresh(db_user)return db_userdef get_items(db: Session, skip: int 0, limit: int 100):return db.query(models.Item).offset(skip).limit(limit).all()def create_user_item(db: Session, item: schemas.ItemCreate, user_id: int):db_item models.Item(**item.dict(), owner_iduser_id)db.add(db_item)db.commit()db.refresh(db_item)return db_item Tip 这里不是将每个关键字参数传递给Item并从Pydantic模型中读取每个参数而是先生成一个字典其中包含Pydantic模型的数据 item.dict()然后我们将dict的键值对 作为关键字参数传递给 SQLAlchemy Item Item(**item.dict())然后我们传递 Pydantic模型未提供的额外关键字参数owner_id Item(**item.dict(), owner_iduser_id)因此创建数据的步骤即为 现在创建工具函数来创建数据。 使用您的数据创建一个 SQLAlchemy 模型实例。使用add来将该实例对象添加到数据库会话。使用commit来将更改提交到数据库以便保存它们。使用refresh来刷新您的实例对象以便它包含来自数据库的任何新数据例如生成的 ID FastAPI应用程序 现在在sql_app/main.py文件中 让我们集成和使用我们之前创建的所有其他部分。 from fastapi import Depends, FastAPI, HTTPException from sqlalchemy.orm import Sessionfrom sql_app import schemas, crud, models from sql_app.database import SessionLocal, enginemodels.Base.metadata.create_all(bindengine)app FastAPI()# Dependency def get_db():db SessionLocal()try:yield dbfinally:db.close()app.post(/users/, response_modelschemas.User) def create_user(user: schemas.UserCreate, db: Session Depends(get_db)):db_user crud.get_user_by_email(db, emailuser.email)if db_user:raise HTTPException(status_code400, detailEmail already registered)return crud.create_user(dbdb, useruser)app.get(/users/, response_modellist[schemas.User]) def read_users(skip: int 0, limit: int 100, db: Session Depends(get_db)):users crud.get_users(db, skipskip, limitlimit)return usersapp.get(/users/{user_id}, response_modelschemas.User) def read_user(user_id: int, db: Session Depends(get_db)):db_user crud.get_user(db, user_iduser_id)if db_user is None:raise HTTPException(status_code404, detailUser not found)return db_userapp.post(/users/{user_id}/items/, response_modelschemas.Item) def create_item_for_user(user_id: int, item: schemas.ItemCreate, db: Session Depends(get_db) ):return crud.create_user_item(dbdb, itemitem, user_iduser_id)app.get(/items/, response_modellist[schemas.Item]) def read_items(skip: int 0, limit: int 100, db: Session Depends(get_db)):items crud.get_items(db, skipskip, limitlimit)return items 现在使用我们在sql_app/database.py文件中创建的SessionLocal来创建依赖项。我们需要每个请求有一个独立的数据库会话/连接SessionLocal在整个请求中使用相同的会话然后在请求完成后关闭它。然后将为下一个请求创建一个新会话。为此我们将创建一个包含yield的依赖项正如前面关于Dependencies with yield的部分中所解释的那样。我们的依赖项将创建一个新的 SQLAlchemy SessionLocal它将在单个请求中使用然后在请求完成后关闭它。 参数db实际上是 type SessionLocal但是这个类用 创建sessionmaker()是 SQLAlchemy 的“代理” Session所以编辑器并不真正知道提供了哪些方法。 但是通过将类型声明为Session编辑器现在可以知道可用的方法.add()、.query()、.commit()等并且可以提供更好的支持比如完成。类型声明不影响实际对象。 运行 # 执行命令 % uvicorn sql_app.main:app --reload打开浏览器http://127.0.0.1:8000/docs
http://www.hkea.cn/news/14296286/

相关文章:

  • 做企业网站多做网站构架用什么软件
  • 电子商务网站建设与管理的论文题目如何进入网站后台管理系统
  • 温州网站开发app制作wordpress最新模板下载
  • 西宁做网站_君博相约wordpress 文章背景
  • 加盟型网站做超市促销海报哪个网站好
  • 网站做好了怎样推广app官方下载网址进入
  • 建设网站怎么备案wordpress移动底部菜单插件
  • 西昌市做网站的公司京东商城网站风格
  • 云南网站建设哪家好功能型网站设计
  • 成都网站开发排名asp.net 网站访问量
  • 学做app网站改版对网站优化影响最大的问题是什么
  • 如何拍做美食的视频网站做毕业设计个人网站任务书
  • 网站优化 北京免费crm软件排名
  • 多钱网网站如何在手机上制作游戏
  • AAP网站开发需要多少钱学习网站建设与管理
  • 厦门建站服务wordpress添加小说板块
  • 用土豆做美食的视频网站wordpress 做手机站
  • 南宁企业官网设计seo怎样
  • 在建设部网站数字营销策划公司
  • 设计师灵感网站常用分类信息网站
  • 做外贸的人经常逛的网站洛阳市App网站开发公司
  • 南阳专业做网站wordpress回复下载插件
  • 潍坊网站维护网站建设服务亿企网络
  • 中国空间站有哪些国家加入北京网络营销岗位数量
  • 门户网站 cms网页制作网站受众群体分析
  • wordpress 搭网站用asp做网站需要安装什么软件
  • 手机网站建设过程管廊建设网站
  • 模板制作视频免费软件如何外贸seo网站建设
  • 免费单页网站建设网络服务商是啥
  • 企业搭建一个营销型网站多少钱单页营销型网站模板下载