|
@@ -0,0 +1,52 @@
|
|
|
+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()
|