from sqlalchemy import create_engine, Column, Integer, String, TypeDecorator from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from db.base_class import Base from utils.EncryptedString import EncryptedString from db.session import session class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True) username = Column(String(255), unique=True) # 使用我们的加密类型 password = Column(EncryptedString(255)) # 255是最大长度 email = Column(EncryptedString(255)) # 普通字段不会加密 public_info = Column(String(255)) # 使用示例 def demo(): # 创建用户 new_user = User( id = 1, username='johndoe', password='my_secure_password', email='john.doe@example.com', public_info='This is public info' ) try: session.add(new_user) session.commit() finally: session.close() # 查询用户 user = session.query(User).filter_by(username='johndoe').first() print(f"Username: {user.username}") print(f"Password (自动解密): {user.password}") print(f"Email (自动解密): {user.email}") print(f"Public Info: {user.public_info}") # 查看数据库中的加密数据 raw_data = session.execute("SELECT password, email FROM users WHERE username='johndoe'").fetchone() print("\n数据库中的加密数据:") print(f"Password: {raw_data[0]}") print(f"Email: {raw_data[1]}") if __name__ == '__main__': demo()