FastAPI - 如何生成随机 ID?
FastAPI - how to generate random ID?
我正在使用 FastAPI 进行简单的 CRUD API,我想做的是在创建新项目时生成唯一的随机数(其他字段是地址和名称,应由用户填写).我该怎么做?
我的代码片段有 class 和 POST 函数。
app = FastAPI()
userdb = []
class User(BaseModel):
id: int
address: str
name: str
@app.post("/users")
def add_user(user: User):
userdb.append(users.dict())
return userdb[-1]
uuid4 通常是要走的路
在ever用函数anywhere生成的任何id中绝对是独一无二的,具有天文数字的可能性(参考RFC-4122 Section 4.4) 并且非常快
from uuid import uuid4
...
unique_id = str(uuid4())
另一种选择 - 通常您想要的是此 ID 不一定是随机的,而是来自您的数据库的一些自动递增索引。 FastAPI 文档给出了一个例子:
...
notes = sqlalchemy.Table(
"notes",
metadata,
sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
sqlalchemy.Column("text", sqlalchemy.String),
sqlalchemy.Column("completed", sqlalchemy.Boolean),
)
...
class NoteIn(BaseModel):
text: str
completed: bool
class Note(BaseModel):
id: int
text: str
completed: bool
...
@app.post("/notes/", response_model=Note)
async def create_note(note: NoteIn):
query = notes.insert().values(text=note.text, completed=note.completed)
last_record_id = await database.execute(query)
return {**note.dict(), "id": last_record_id}
https://fastapi.tiangolo.com/advanced/async-sql-databases/?h=id#about-notedict-id-last_record_id
在您的情况下,您将为 UserIn
和 User
使用单独的模型。然后在您的示例中,您会将响应模型中的 ID 分配为 userdb
列表中的索引(在实际应用程序中,它可能不仅仅是一个列表,而是一个数据库)。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
userdb = []
class UserIn(BaseModel):
address: str
name: str
class User(BaseModel):
id: int
address: str
name: str
@app.post("/users")
def add_user(user_in: UserIn) -> User:
userdb.append(user_in)
user_out_dict = userdb[-1].dict()
user_out_dict.update({"id": len(userdb)-1})
return User(**user_out_dict)
我正在使用 FastAPI 进行简单的 CRUD API,我想做的是在创建新项目时生成唯一的随机数(其他字段是地址和名称,应由用户填写).我该怎么做?
我的代码片段有 class 和 POST 函数。
app = FastAPI()
userdb = []
class User(BaseModel):
id: int
address: str
name: str
@app.post("/users")
def add_user(user: User):
userdb.append(users.dict())
return userdb[-1]
uuid4 通常是要走的路
在ever用函数anywhere生成的任何id中绝对是独一无二的,具有天文数字的可能性(参考RFC-4122 Section 4.4) 并且非常快
from uuid import uuid4
...
unique_id = str(uuid4())
另一种选择 - 通常您想要的是此 ID 不一定是随机的,而是来自您的数据库的一些自动递增索引。 FastAPI 文档给出了一个例子:
...
notes = sqlalchemy.Table(
"notes",
metadata,
sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
sqlalchemy.Column("text", sqlalchemy.String),
sqlalchemy.Column("completed", sqlalchemy.Boolean),
)
...
class NoteIn(BaseModel):
text: str
completed: bool
class Note(BaseModel):
id: int
text: str
completed: bool
...
@app.post("/notes/", response_model=Note)
async def create_note(note: NoteIn):
query = notes.insert().values(text=note.text, completed=note.completed)
last_record_id = await database.execute(query)
return {**note.dict(), "id": last_record_id}
https://fastapi.tiangolo.com/advanced/async-sql-databases/?h=id#about-notedict-id-last_record_id
在您的情况下,您将为 UserIn
和 User
使用单独的模型。然后在您的示例中,您会将响应模型中的 ID 分配为 userdb
列表中的索引(在实际应用程序中,它可能不仅仅是一个列表,而是一个数据库)。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
userdb = []
class UserIn(BaseModel):
address: str
name: str
class User(BaseModel):
id: int
address: str
name: str
@app.post("/users")
def add_user(user_in: UserIn) -> User:
userdb.append(user_in)
user_out_dict = userdb[-1].dict()
user_out_dict.update({"id": len(userdb)-1})
return User(**user_out_dict)