# 使用SQLAlchemy ORM操作数据库
from sqlalchemy import create_engine, Column, Integer, String, DateTime, Text, ForeignKey, text
from sqlalchemy.orm import declarative_base, sessionmaker, relationship
Base = declarative_base()
class User(Base):
__tablename__ = 't_user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
nickname = Column(String(255), nullable=False)
openid = Column(String(255), nullable=False)
status = Column(Integer, nullable=False)
avatar = Column(Text, nullable=False)
can_download_count = Column(Integer, nullable=False)
create_time = Column(DateTime, nullable=False)
update_time = Column(DateTime, nullable=False)
operator = Column(Integer, nullable=False)
def __repr__(self):
# 返回User对象的字符串表示
return f"User(id={self.id}, name={self.name}, nickname={self.nickname}, openid={self.openid}, status={self.status}, avatar={self.avatar}, can_download_count={self.can_download_count}, create_time={self.create_time}, update_time={self.update_time}, operator={self.operator})"
engine = create_engine(
'mysql+pymysql://root:123456@localhost:3306/demo?charset=utf8mb4', echo=True, pool_size=20)
Base.metadata.create_all(engine)
# 操作数据
Session = sessionmaker(bind=engine)
session = Session()
# 插入数据
user = User(name='test', nickname='test', openid='123456',
status=1, avatar='https://example.com/avatar.jpg')
# session.add(user)
# session.commit()
# 查询全部数据
user = session.query(User).all()
# print(user)
# 执行原生sql
result = session.execute(text("SELECT * FROM t_user"))
for row in result:
print(row)
# 更新
user = session.query(User).filter(User.id == 1).first()
if user:
user.nickname = 'test1'
session.commit()
else:
print("User not found")
# 删除
user = session.query(User).filter(User.id == 1).first()
if user:
session.delete(user)
session.commit()
else:
print("User not found")
# 事务管理
try:
with session.begin():
# 执行一些数据库操作
user1 = User(name='Tom', nickname='Tommy', openid='654321',
status=1, avatar='https://example.com/avatar2.jpg')
session.add(user1)
raise Exception("Simulated error") # 模拟错误,触发回滚
except Exception as e:
# 处理异常
print(f"Transaction failed: {e}")