12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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()
|