sqlalchemy的基本使用
SQLAlchemy 1.4 版本的基本使用
from datetime import datetime
from urllib.parse import quote_plus
from sqlalchemy import Column, create_engine, Integer, String, DateTime, inspect
from sqlalchemy.orm import declarative_base, Session
Base = declarative_base()
def get_engine():
ip = "192.168.124.85"
port = 3306
username = "root"
password = "root"
db_name = "demo"
connection_params = f"mysql+pymysql://{username}:{quote_plus(password)}@{ip}:{port}/{db_name}"
engine = create_engine(connection_params)
return engine
class User(Base):
__tablename__ = "user_info"
id = Column(Integer, primary_key=True)
name = Column(String(50))
full_name = Column(String(128))
age = Column(Integer)
memo = Column(String(255))
create_time = Column(DateTime, default=datetime.now)
update_time = Column(DateTime, default=datetime.now)
if __name__ == "__main__":
engine = get_engine()
# 表不存在则创建
insp = inspect(engine)
table_name = User.__tablename__
if not insp.has_table(table_name):
print(f"{table_name} 表不存在")
Base.metadata.create_all(engine)
print(f"{table_name} 表已创建")
# 测试添加数据
user = User(name="ok", age=23)
with Session(engine) as session:
session.add(user)
session.commit()
其中 Column 的 default 是由 sqlalchemy 提供的,在插入数据的时候,由 sqlalchemy 提供这部分字段的值。
而 server_default 是由数据库提供的,使用 desc table_name 时,会看到这部分字段由默认值,在插入数据时,sqlalchemy 产生的 sql 中不提供这部分字段的值。
有了计划记得推动,不要原地踏步。