# -*- coding: utf-8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmaker engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan') Base = declarative_base() # 生成orm基类 class User(Base): #进行映射,创建表结构,models ,三项,id name password __tablename__ = 'user' # 表名 id = Column(Integer, primary_key=True) name = Column(String(32)) password = Column(String(64)) Base.metadata.create_all(engine) # 创建表结构 Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例 Session = Session_class() # 生成session实例 # Session.close()#关闭连接 这个放最后 # 插入开始 print('插入开始') user_obj = User(name="jack", password="jack") # 生成你要创建的数据对象 print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建 print(user_obj.name, user_obj.id) # 此时也依然还没创建 Session.commit() # 现此才统一提交,创建数据 print('提交数据') print(user_obj.name, user_obj.id) # 提交过,就会放在数据库里了。 # 插入结束 print('插入结束') # 查询开始 print('查询开始') my_user = Session.query(User).filter_by(name="jack").first() # 查找name=jack的 print(my_user) # 这查出来是个对象 print(my_user.id, my_user.name, my_user.password) # 查询结束 print('查询结束') # 删除开始 print('删除开始') # 先插入一个,可以删的。 user_obj = User(name="rose", password="jack") Session.add(user_obj) Session.commit() # 查找到需要删的对象 del_user = Session.query(User).filter_by(name="rose").first() print(del_user.name) Session.delete(del_user) # 删除命令 Session.commit() # 提交删除 find_user = Session.query(User).all()#查询表的全部内容 for i in find_user: print(i.id, i.name) # 删除结束 # 修改开始 print('修改开始') my_user = Session.query(User).filter_by(name="jack").first() # 找到第一条名字是jack的,生成对象。 my_user.name = "jackadam" # 给对象变量命名 temp_id = my_user.id # 把这个对象的ID,赋值给临时变量temp_id Session.commit() # 提交修改 my_user2 = Session.query(User).filter_by(id=temp_id).first() # 根据临时变量id,重新查询一下名字是否修改。 print(my_user2.name) # 修改结束 print('修改结束') # 多条件查询 objs = Session.query(User).filter(User.id > 0).filter(User.id < 7).all() # 多条件查询 # 统计 print('统计') count_num = Session.query(User).filter(User.name.like("ja%")).count() print(count_num) # 统计 # 分组 print('分组') from sqlalchemy import func print(Session.query(func.count(User.name), User.name).group_by(User.name).all()) # 分组 Session.close()#最后不忘close ''' orady_by desc 升序 asc 降序 '''
注释很详细了,不写了
from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan', convert_unicode=True) db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine)) Base = declarative_base() Base.query = db_session.query_property() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) email = Column(String(120)) def __init__(self, name=None, email=None): self.name = name self.email = email def __repr__(self): return '<User %r>' % (self.name) def init_db(): # 在这里导入所有的可能与定义模型有关的模块,这样他们才会合适地 # 在 metadata 中注册。否则,您将不得不在第一次执行 init_db() 时 # 先导入他们。 Base.metadata.create_all(bind=engine) if __name__ == '__main__': init_db() print('C,创建数据') new_user=User(name= 'rose',email='rose@163.com') db_session.add(new_user) db_session.commit() db_session.remove() print('R,读取数据') new_user = User(name='jack', email='jack@163.com') db_session.add(new_user) db_session.commit() db_session.remove() msg=User.query.filter_by(name='jack').first() print(msg.email) print('U,更新数据') tag_user=User.query.filter_by(name='jack').first() tag_user.email='jack@hotmail.com' db_session.commit() db_session.remove() tag=User.query.filter_by(name='jack').first() print(tag.email) print('D,删除数据') del_user=User.query.filter_by(name='jack').first() db_session.delete(del_user) db_session.commit() db_session.remove()
另一种简单的连接示例,http://docs.pythontab.com/flask/flask0.10/patterns/sqlalchemy.html
从flask使用sqlalchemy文档中学到的。
看了几个别人的代码,也是这样写的,用映射的类名来查询,不使用session。