1 import logging 2 from sqlalchemy import Column, String, create_engine 3 from sqlalchemy.ext.declarative import declarative_base 4 from sqlalchemy.orm import sessionmaker 5 6 # 创建对象的基类 7 Base = declarative_base() 8 9 10 # 创建User对象 11 class User(Base): 12 # 使用InnoDB,UTF-8编码 13 __table_args__ = { 14 'mysql_engine': 'InnoDB', 15 'mysql_charset': 'utf8' 16 } 17 # 表的名字 18 __tablename__ = 'User' 19 # 表结构 20 id = Column(String(20), primary_key=True) 21 name = Column(String(20)) 22 23 24 def make_connect(): 25 # 初始化数据库连接 26 engine = create_engine("mysql+pymysql://root:123@localhost:3306/test", echo=True) 27 # 创建所有Base子类表 28 Base.metadata.create_all(engine) 29 # 创建DBSession类型 30 DBSession = sessionmaker(bind=engine) 31 # 创建session 32 session = DBSession() 33 return session
“mysql+pymysql”使用 MySQL-Pymysql 来连接,“root”和“123”分别是用户名和密码,“localhost”是数据库的域名,“test”是使用的数据库名,“charset”指定了连接时使用的字符集。
添加数据:
1 new_user = User(id='4', name='root') 2 session = make_connect() 3 session.add(new_user) 4 try: 5 session.commit() 6 except BaseException as e: 7 logging.exception(e) 8 finally: 9 session.close()
添加结果:
删除数据需要先查询数据再删除:
1 session = make_connect() 2 user = session.query(User).filter(User.id == '4').first() 3 session.delete(user) 4 try: 5 session.commit() 6 except BaseException as e: 7 logging.exception(e) 8 finally: 9 session.close()
删除结果:
更新数据(依然先查询数据持久化后修改):
1 session = make_connect() 2 session.query(User).filter(User.id == '4').first().id = '1' 3 try: 4 session.commit() 5 except BaseException as e: 6 logging.exception(e) 7 finally: 8 session.close()
以上将id=4 的数据查询出后id更新为1