TestEncryptedString.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from sqlalchemy import create_engine, Column, Integer, String, TypeDecorator
  2. from sqlalchemy.ext.declarative import declarative_base
  3. from sqlalchemy.orm import sessionmaker
  4. from db.base_class import Base
  5. from utils.EncryptedString import EncryptedString
  6. from db.session import session
  7. class User(Base):
  8. __tablename__ = 'user'
  9. id = Column(Integer, primary_key=True)
  10. username = Column(String(255), unique=True)
  11. # 使用我们的加密类型
  12. password = Column(EncryptedString(255)) # 255是最大长度
  13. email = Column(EncryptedString(255))
  14. # 普通字段不会加密
  15. public_info = Column(String(255))
  16. # 使用示例
  17. def demo():
  18. # 创建用户
  19. new_user = User(
  20. id = 1,
  21. username='johndoe',
  22. password='my_secure_password',
  23. email='john.doe@example.com',
  24. public_info='This is public info'
  25. )
  26. try:
  27. session.add(new_user)
  28. session.commit()
  29. finally:
  30. session.close()
  31. # 查询用户
  32. user = session.query(User).filter_by(username='johndoe').first()
  33. print(f"Username: {user.username}")
  34. print(f"Password (自动解密): {user.password}")
  35. print(f"Email (自动解密): {user.email}")
  36. print(f"Public Info: {user.public_info}")
  37. # 查看数据库中的加密数据
  38. raw_data = session.execute("SELECT password, email FROM users WHERE username='johndoe'").fetchone()
  39. print("\n数据库中的加密数据:")
  40. print(f"Password: {raw_data[0]}")
  41. print(f"Email: {raw_data[1]}")
  42. if __name__ == '__main__':
  43. demo()