簡體   English   中英

如何使用sqlmodel在現有數據庫中創建表

[英]How to create table in existing database with sqlmodel

我正在通過此鏈接https://sqlmodel.tiangolo.com/tutorial/connect/create-connected-tables/創建我的 sqlite 數據庫表。

現在,這會在我的 FastAPI 應用程序啟動時創建兩個表TeamHero 但在特殊用例中,我可能需要創建另一個新表。

我當然可以通過以下方式做到這一點

def create_specific_table():
    conn = engine.connect()
    conn.execute(
        """ CREATE TABLE IF NOT EXISTS table2 ( 
            key TEXT PRIMARY KEY,  
            execution_id TEXT,
            )"""
          )

但我想用 Model class 來做。# models/table2.py

from sqlmodel import Column, SQLModel
class Table2(SQLModel, table=True):
    key: str = Field(default=None, foreign_key="table1.id")
    execution_id: str = Field(title="My Execution ID", index=False, default=None)

然后

def create_specific_table():
    import db.engine # Using the same engine
    SQLModel.metadata.create_all(engine) 

但它沒有創建Table2

我還嘗試將表傳遞給create_all表列表

def create_specific_table():
    import db.engine # Using the same engine
    SQLModel.metadata.create_all(engine, tables=[Table1, Table2])

但是低於錯誤

Traceback (most recent call last):
  File "pydantic/validators.py", line 709, in pydantic.validators.find_validators
TypeError: issubclass() arg 1 must be a class



sqlmodel/main.py", line 277, in __new__
    new_cls = super().__new__(cls, name, bases, dict_used, **config_kwargs)
  File "pydantic/main.py", line 205, in pydantic.main.ModelMetaclass.__new__
  File "pydantic/fields.py", line 491, in pydantic.fields.ModelField.infer
  File "pydantic/fields.py", line 421, in pydantic.fields.ModelField.__init__
  File "pydantic/fields.py", line 542, in pydantic.fields.ModelField.prepare
  File "pydantic/fields.py", line 804, in pydantic.fields.ModelField.populate_validators
  File "pydantic/validators.py", line 718, in find_validators
RuntimeError: error checking inheritance of FieldInfo(extra={}) (type: FieldInfo)

我在main.py中觸發 db model 創建的方式基本上是

@app.on_event("startup")
def on_startup():
    create_db_and_tables() # these are common
    create_specific_table() 

嘗試:

    Table2.__table__.create(engine)

參考: 如何將 SQLModel 與 1 個以上的數據庫一起使用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM