SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />过程:SQLAchemy调用DBAPI,Dialect 是选择哪个DBAPI,引擎负责连接,连接需要用到连接池,通过Dlialect,具体去选择哪个第三方插件。

SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

MySQL-Python
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle
oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] 更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html

一、底层处理

使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。

#!/usr/bin/env python
# -*- coding:utf- -*-
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=) # 执行SQL
# cur = engine.execute(
# "INSERT INTO hosts (host, color_id) VALUES ('1.1.1.22', 3)"
# ) # 新插入行自增ID
# cur.lastrowid # 执行SQL
# cur = engine.execute(
# "INSERT INTO hosts (host, color_id) VALUES(%s, %s)",[('1.1.1.22', ),('1.1.1.221', ),]
# ) # 执行SQL
# cur = engine.execute(
# "INSERT INTO hosts (host, color_id) VALUES (%(host)s, %(color_id)s)",
# host='1.1.1.99', color_id=
# ) # 执行SQL
# cur = engine.execute('select * from hosts')
# 获取第一行数据
# cur.fetchone()
# 获取第n行数据
# cur.fetchmany()
# 获取所有数据
# cur.fetchall()

二、ORM功能使用

使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。

1、创建表

engine = create_engine('mysql+pymysql://root:python123@192.168.12.100:3306/test?charset=utf8') #有中文的话需要声明字符集
#!/usr/bin/env python
# -*- coding:utf- -*-
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=) Base = declarative_base() # 创建单表
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String())
extra = Column(String()) __table_args__ = (
UniqueConstraint('id', 'name', name='uix_id_name'),
Index('ix_id_name', 'name', 'extra'),
) # 一对多
class Favor(Base):
__tablename__ = 'favor'
nid = Column(Integer, primary_key=True)
caption = Column(String(), default='red', unique=True) class Person(Base):
__tablename__ = 'person'
nid = Column(Integer, primary_key=True)
name = Column(String(), index=True, nullable=True)
favor_id = Column(Integer, ForeignKey("favor.nid")) # 多对多
class Group(Base):
__tablename__ = 'group'
id = Column(Integer, primary_key=True)
name = Column(String(), unique=True, nullable=False)
port = Column(Integer, default=) class Server(Base):
__tablename__ = 'server' id = Column(Integer, primary_key=True, autoincrement=True)
hostname = Column(String(), unique=True, nullable=False) class ServerToGroup(Base):
__tablename__ = 'servertogroup'
nid = Column(Integer, primary_key=True, autoincrement=True)
server_id = Column(Integer, ForeignKey('server.id'))
group_id = Column(Integer, ForeignKey('group.id')) def init_db():
Base.metadata.create_all(engine) def drop_db():
Base.metadata.drop_all(engine)
#!/usr/bin/env python
# -*- coding:utf- -*- import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey,UniqueConstraint,Index
from sqlalchemy.orm import sessionmaker,relationship engine = create_engine('mysql+pymysql://root:python123@192.168.12.100:3306/test')
Base =declarative_base() class Son(Base):
__tablename__ = 'son'
id = Column(Integer,primary_key=True)
name = Column(String())
age = Column(String()) father_id = Column(Integer,ForeignKey('father.id')) class Father(Base):
__tablename__ = 'father'
id = Column(Integer,primary_key=True)
name = Column(String())
age = Column(String())
# son = relationship('Son') Base.metadata.create_all(engine) #创建表
#Base.Metadata.drop_all(engine) Session = sessionmaker(bind=engine)
session = Session() f1 = Father(name='alvin',age=)
session.commit()
w1 = Son(name = 'little alvin1', age = , father_id=)
w2 = Son(name = 'little alvin1', age = , father_id=)
# w1 = Son(name = 'little alvin1', age = )
# w2 = Son(name = 'little alvin1', age = ) # f1.son=[w1,w2] session.add_all([f1,w1,w2])
session.commit()

创建表-外键并添加值的方式一

#!/usr/bin/env python
# -*- coding:utf- -*- import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey,UniqueConstraint,Index
from sqlalchemy.orm import sessionmaker,relationship engine = create_engine('mysql+pymysql://root:python123@192.168.12.100:3306/test')
Base =declarative_base() class Son(Base):
__tablename__ = 'son'
id = Column(Integer,primary_key=True)
name = Column(String())
age = Column(String()) father_id = Column(Integer,ForeignKey('father.id')) class Father(Base):
__tablename__ = 'father'
id = Column(Integer,primary_key=True)
name = Column(String())
age = Column(String())
son = relationship('Son') Base.metadata.create_all(engine) #创建表
#Base.Metadata.drop_all(engine) Session = sessionmaker(bind=engine)
session = Session() f1 = Father(name='alvin',age=)
session.commit()
# w1 = Son(name = 'little alvin1', age = , father_id=)
# w2 = Son(name = 'little alvin1', age = , father_id=)
w1 = Son(name = 'little alvin1', age = )
w2 = Son(name = 'little alvin1', age = ) f1.son=[w1,w2] session.add_all([f1,w1,w2])
session.commit()

创建表-外键并添加值的方式二

2.操作表

#!/usr/bin/env python
# -*- coding:utf- -*-
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=) Base = declarative_base() # 创建单表
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String())
extra = Column(String()) __table_args__ = (
UniqueConstraint('id', 'name', name='uix_id_name'),
Index('ix_id_name', 'name', 'extra'),
) def __repr__(self):
return "%s-%s" %(self.id, self.name) # 一对多
class Favor(Base):
__tablename__ = 'favor'
nid = Column(Integer, primary_key=True)
caption = Column(String(), default='red', unique=True) def __repr__(self):
return "%s-%s" %(self.nid, self.caption) class Person(Base):
__tablename__ = 'person'
nid = Column(Integer, primary_key=True)
name = Column(String(), index=True, nullable=True)
favor_id = Column(Integer, ForeignKey("favor.nid"))
# 与生成表结构无关,仅用于查询方便
favor = relationship("Favor", backref='pers') # 多对多
class ServerToGroup(Base):
__tablename__ = 'servertogroup'
nid = Column(Integer, primary_key=True, autoincrement=True)
server_id = Column(Integer, ForeignKey('server.id'))
group_id = Column(Integer, ForeignKey('group.id'))
group = relationship("Group", backref='s2g')
server = relationship("Server", backref='s2g') class Group(Base):
__tablename__ = 'group'
id = Column(Integer, primary_key=True)
name = Column(String(), unique=True, nullable=False)
port = Column(Integer, default=)
# group = relationship('Group',secondary=ServerToGroup,backref='host_list') class Server(Base):
__tablename__ = 'server' id = Column(Integer, primary_key=True, autoincrement=True)
hostname = Column(String(), unique=True, nullable=False) def init_db():
Base.metadata.create_all(engine) def drop_db():
Base.metadata.drop_all(engine) Session = sessionmaker(bind=engine)
session = Session()

表结构+连接数据库

obj = Users(name="alex0", extra='sb')
session.add(obj)
session.add_all([
Users(name="alex1", extra='sb'),
Users(name="alex2", extra='sb'),
])
session.commit()

session.query(Users).filter(Users.id > ).delete()
session.commit()

session.query(Users).filter(Users.id > ).update({"name" : ""})
session.query(Users).filter(Users.id > ).update({Users.name: Users.name + ""}, synchronize_session=False)
session.query(Users).filter(Users.id > ).update({"num": Users.num + }, synchronize_session="evaluate")
session.commit()

ret = session.query(Users).all()
ret = session.query(Users.name, Users.extra).all()
ret = session.query(Users).filter_by(name='alex').all()
ret = session.query(Users).filter_by(name='alex').first()

# 条件
ret = session.query(Users).filter_by(name='alex').all()
ret = session.query(Users).filter(Users.id > , Users.name == 'eric').all()
ret = session.query(Users).filter(Users.id.between(, ), Users.name == 'eric').all()
ret = session.query(Users).filter(Users.id.in_([,,])).all()
ret = session.query(Users).filter(~Users.id.in_([,,])).all()
ret = session.query(Users).filter(Users.id.in_(session.query(Users.id).filter_by(name='eric'))).all()
from sqlalchemy import and_, or_
ret = session.query(Users).filter(and_(Users.id > , Users.name == 'eric')).all()
ret = session.query(Users).filter(or_(Users.id < , Users.name == 'eric')).all()
ret = session.query(Users).filter(
or_(
Users.id < ,
and_(Users.name == 'eric', Users.id > ),
Users.extra != ""
)).all() # 通配符
ret = session.query(Users).filter(Users.name.like('e%')).all()
ret = session.query(Users).filter(~Users.name.like('e%')).all() # 限制
ret = session.query(Users)[:] # 排序
ret = session.query(Users).order_by(Users.name.desc()).all()
ret = session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all() # 分组
from sqlalchemy.sql import func ret = session.query(Users).group_by(Users.extra).all()
ret = session.query(
func.max(Users.id),
func.sum(Users.id),
func.min(Users.id)).group_by(Users.name).all() ret = session.query(
func.max(Users.id),
func.sum(Users.id),
func.min(Users.id)).group_by(Users.name).having(func.min(Users.id) >).all() # 连表 ret = session.query(Users, Favor).filter(Users.id == Favor.nid).all() ret = session.query(Person).join(Favor).all() ret = session.query(Person).join(Favor, isouter=True).all() # 组合
q1 = session.query(Users.name).filter(Users.id > )
q2 = session.query(Favor.caption).filter(Favor.nid < )
ret = q1.union(q2).all() q1 = session.query(Users.name).filter(Users.id > )
q2 = session.query(Favor.caption).filter(Favor.nid < )
ret = q1.union_all(q2).all()

其他

更多功能参见文档,猛击这里下载PDF

#!/usr/bin/env python
# -*- coding:utf- -*-
from sqlalchemy import create_engine,and_,or_,func,Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey,UniqueConstraint,DateTime
from sqlalchemy.orm import sessionmaker,relationship Base = declarative_base() #生成一个SqlORM 基类 # 服务器账号和组
# HostUser2Group = Table('hostuser_2_group',Base.metadata,
# Column('hostuser_id',ForeignKey('host_user.id'),primary_key=True),
# Column('group_id',ForeignKey('group.id'),primary_key=True),
# ) # 用户和组关系表,用户可以属于多个组,一个组可以有多个人
UserProfile2Group = Table('userprofile_2_group',Base.metadata,
Column('userprofile_id',ForeignKey('user_profile.id'),primary_key=True),
Column('group_id',ForeignKey('group.id'),primary_key=True),
) # 程序登陆用户和服务器账户,一个人可以有多个服务器账号,一个服务器账号可以给多个人用
UserProfile2HostUser= Table('userprofile_2_hostuser',Base.metadata,
Column('userprofile_id',ForeignKey('user_profile.id'),primary_key=True),
Column('hostuser_id',ForeignKey('host_user.id'),primary_key=True),
) class Host(Base):
__tablename__='host'
id = Column(Integer,primary_key=True,autoincrement=True)
hostname = Column(String(),unique=True,nullable=False)
ip_addr = Column(String(),unique=True,nullable=False)
port = Column(Integer,default=)
def __repr__(self):
return "<id=%s,hostname=%s, ip_addr=%s>" %(self.id,
self.hostname,
self.ip_addr) class HostUser(Base):
__tablename__ = 'host_user'
id = Column(Integer,primary_key=True)
AuthTypes = [
(u'ssh-passwd',u'SSH/Password'),
(u'ssh-key',u'SSH/KEY'),
]
# auth_type = Column(ChoiceType(AuthTypes))
auth_type = Column(String())
username = Column(String(),unique=True,nullable=False)
password = Column(String()) host_id = Column(Integer,ForeignKey('host.id')) # groups = relationship('Group',
# secondary=HostUser2Group,
# backref='host_list') __table_args__ = (UniqueConstraint('host_id','username', name='_host_username_uc'),) def __repr__(self):
return "<id=%s,name=%s>" %(self.id,self.username) class Group(Base):
__tablename__ = 'group'
id = Column(Integer,primary_key=True)
name = Column(String(),unique=True,nullable=False)
def __repr__(self):
return "<id=%s,name=%s>" %(self.id,self.name) class UserProfile(Base):
__tablename__ = 'user_profile'
id = Column(Integer,primary_key=True)
username = Column(String(),unique=True,nullable=False)
password = Column(String(),nullable=False)
# host_list = relationship('HostUser',
# secondary=UserProfile2HostUser,
# backref='userprofiles')
# groups = relationship('Group',
# secondary=UserProfile2Group,
# backref='userprofiles')
def __repr__(self):
return "<id=%s,name=%s>" %(self.id,self.username) class AuditLog(Base):
__tablename__ = 'audit_log'
id = Column(Integer,primary_key=True)
userprofile_id = Column(Integer,ForeignKey('user_profile.id'))
hostuser_id = Column(Integer,ForeignKey('host_user.id'))
action_choices2 = [
(u'cmd',u'CMD'),
(u'login',u'Login'),
(u'logout',u'Logout'),
]
action_type = Column(ChoiceType(action_choices2))
#action_type = Column(String())
cmd = Column(String())
date = Column(DateTime) # user_profile = relationship("UserProfile")
#bind_host = relationship("BindHost") engine = create_engine("mysql+pymsql://root:123@localhost:3306/stupid_jumpserver",echo=False)
Base.metadata.create_all(engine) #创建所有表结构

表结构操作联系

---苑昊单表操作

(不涉及一对多,多对多)
 
#coding:utf8
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
print(sqlalchemy.__version__) engine = create_engine('sqlite:///dbyuan1.db', echo=True) Base = declarative_base()#生成一个SQLORM基类 class User(Base):
__tablename__ = 'users' id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String) def __repr__(self):
return "<User(name='%s', fullname='%s', password='%s')>" % (
self.name, self.fullname, self.password) Base.metadata.create_all(engine) #创建所有表结构 ed_user = User(name='xiaoyu', fullname='Xiaoyu Liu', password='')
print(ed_user)
#这两行触发sessionmaker类下的__call__方法,return得到 Session实例,赋给变量session,所以session可以调用Session类下的add,add_all等方法
MySession = sessionmaker(bind=engine)
session = MySession() session.add(ed_user)
# our_user = session.query(User).filter_by(name='ed').first()
# SELECT * FROM users WHERE name="ed" LIMIT ;
# session.add_all([
# User(name='alex', fullname='Alex Li', password=''),
# User(name='alex', fullname='Alex old', password=''),
# User(name='peiqi', fullname='Peiqi Wu', password='sxsxsx')]) session.commit() #print(">>>",session.query(User).filter_by(name='ed').first())
#print(session.query(User).all())
# for row in session.query(User).order_by(User.id):
# print(row)
# for row in session.query(User).filter(User.name.in_(['alex', 'wendy', 'jack'])):#这里的名字是完全匹配
# print(row)
# for row in session.query(User).filter(~User.name.in_(['ed', 'wendy', 'jack'])):
# print(row)
#print(session.query(User).filter(User.name == 'ed').count())
#from sqlalchemy import and_, or_ # for row in session.query(User).filter(and_(User.name == 'ed', User.fullname == 'Ed Jones')):
# print(row)
# for row in session.query(User).filter(or_(User.name == 'ed', User.name == 'wendy')):
# print(row)

单表操作

二  一对多的关联表操作

案例一

复制代码
#coding:utf8 import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship engine = create_engine('sqlite:///dbyuan2.db', echo=True) Base = declarative_base() class Father(Base):
__tablename__ = 'father'
#id = Column(Integer, primary_key=True)里的数据类型一定写整型(Integer)
id = Column(Integer, primary_key=True)
name = Column(String())
def __repr__(self):
return "<Father(name='%s')>" % self.name class Son(Base):
__tablename__ = 'son' id = Column(Integer, primary_key=True)
name = Column(String())
#ForeignKey建在多的一方
father_id = Column(String(), ForeignKey('father.id'))
father=relationship("Father",backref="son", order_by=id)
def __repr__(self):
return "<Son(name='%s')>" % self.name Base.metadata.create_all(engine) Session = sessionmaker(bind=engine)
session = Session() f1= Father(name='zhangsan')
f2= Father(name='lisi')
f3= Father(name='wangwu') f1.son = [Son(name='zhangdasan'),Son(name='zhangersan')] session.add(f1)
session.commit() for u, a in session.query(Father, Son).\
filter(Father.id==Son.id).\
all():
print u, a #<Father(name='zhangsan')> <Son(name='zhangdasan')>

aaarticlea/png;base64,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" alt="" />

案例二

#__ *__ coding:utf8__*__

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,and_,or_,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship Base = declarative_base() #生成一个SqlORM 基类 engine = create_engine('sqlite:///dbyuan3.db', echo=True) class Host(Base):
__tablename__ ='host'
id = Column(Integer,primary_key=True,autoincrement=True)
hostname = Column(String(),unique=True,nullable=False)
ip_addr = Column(String(),unique=True,nullable=False)
port = Column(Integer,default=)
#前提 一个主机只能属于一个组
group_id=Column(Integer,ForeignKey('group.id'))
group=relationship('Group',backref='host')
def __repr__(self):
return "id:%s hostname:%s port:%s"%(self.id,self.hostname,self.port) class Group(Base):
__tablename__='group'
id=Column(Integer,primary_key=True)
name=Column(String(),unique=True,nullable=False) def __repr__(self):
return "id:%s hostname:%s"%(self.id,self.name) Base.metadata.create_all(engine) #创建所有表结构 if __name__ == '__main__':
SessionCls = sessionmaker(bind=engine,autoflush=False)
session = SessionCls() g1=Group(name='g1')
g2=Group(name='g2')
g3=Group(name='g3')
session.add_all([g1,g2,g3])
session.commit() h1 = Host(hostname='localhost',ip_addr='127.0.0.1',group_id=g1.id)#g1如果在这之前没有提交,group_id拿到的永远是一个空值
h2 = Host(hostname='ubuntu',ip_addr='192.168.2.243',port=)
session.add_all([h1,h2]) session.commit() g1=session.query(Group).filter(Group.name=='g1').first()
h=session.query(Host).filter(Host.hostname=='localhost').first()#注意要加上first(),否则报错,注意与all()结果的不同 print "<<<",g2
print ">>>",h print(h.group.name)
print g1.host
print g1.host[].hostname #g2.host什么结果?(未绑定,无结果)

aaarticlea/png;base64,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" alt="" />

三 多对多的关联表操作

#!/usr/bin/env python
# -*- coding:utf- -*- from sqlalchemy import create_engine,and_,or_,func,Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship Base = declarative_base() #生成一个SqlORM 基类 Host2Group = Table('host_2_group',Base.metadata,
Column('host_id',ForeignKey('host.id'),primary_key=True),
Column('group_id',ForeignKey('group.id'),primary_key=True),) engine = create_engine('sqlite:///dbyuan4.db', echo=True) class Host(Base):
__tablename__ = 'host' id = Column(Integer,primary_key=True,autoincrement=True)
hostname = Column(String(),unique=True,nullable=False)
ip_addr = Column(String(),unique=True,nullable=False)
port = Column(Integer,default=)
group = relationship('Group',
secondary=Host2Group,
backref='host_list') #group =relationship("Group",back_populates='host_list')
def __repr__(self):
return "<id=%s,hostname=%s, ip_addr=%s>" %(self.id,
self.hostname,
self.ip_addr)
class Group(Base):
__tablename__ = 'group'
id = Column(Integer,primary_key=True)
name = Column(String(),unique=True,nullable=False) def __repr__(self):
return "<id=%s,name=%s>" %(self.id,self.name) Base.metadata.create_all(engine) #创建所有表结构 if __name__ == '__main__':
SessionCls = sessionmaker(bind=engine,autoflush=False)
session = SessionCls() g1 = Group(name='g1')
g2 = Group(name='g2')
g3 = Group(name='g3')
g4 = Group(name='g4')
session.add_all([g1,g2,g3,g4])
session.commit() #g4 = session.query(Group).filter(Group.name=='g4').first()
#h = session.query(Host).filter(Host.hostname=='localhost').update({'group_id':g4.id})
#h = session.query(Host).filter(Host.hostname=='localhost').first()
#print("h1:",h.group.name )
#print("g:",g4.host_list ) h1 = Host(hostname='h1',ip_addr='192.168.1.56')
h2 = Host(hostname='h2',ip_addr='192.168.1.57',port=)
h3 = Host(hostname='ubuntu',ip_addr='192.168.1.58',port=)
session.add_all([h1,h2,h3])
session.commit() groups = session.query(Group).all()
g1 = session.query(Group).first() h2 = session.query(Host).filter(Host.hostname=='h2').first()
h2.group = groups[:-]
print("===========>",h2.group) #objs = #session.query(Host).join(Host.group).group_by(Group.name).all()
#objs = session.query(Host,func.count(Group.name)).\
#join(Host.group).group_by(Group.name).all()
#print("-->objs:",objs)
#print("++>",obj)
#obj.hostname = "test server"
#session.delete(obj)
#objs = session.query(Host).filter(and_(Host.hostname.like("ub%"), Host.port > )).all() session.commit()

aaarticlea/png;base64,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" alt="" />

注意:

1   Session = sessionmaker(bind=engine,autoflush=False)

2   session.add添加数据到数据后,一定要session.commit()后才能增删改查,否则结果只能为none

3   session.query(Group).filter(Group.name=='g1').first() 注意有无first()的区别

再注意:

1   关于 session.add   session.query   session.commit的顺序问题?

就是说在同一个会话中, insert into table (xxxx)后,可以select * from xxx;可以查询到插入的数据,只是不能在其他会话,比如我另开一个客户端去连接数据库不能查询到刚刚插入的数据。

这个数据已经到数据库。值是数据库吧这个数据给锁了。只有插入数据的那个session可以查看到,其他的session不能查看到,可以理解提交并解锁吧。

2  第三张表必须利用table创建吗?NO

3   联合唯一

4   一对多的第二个例子,如何理解去掉第一个commit后就报错的现象

----课上的两个小案例

#!/usr/bin/env python
# -*- coding:utf- -*- import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey,UniqueConstraint,Index
from sqlalchemy.orm import sessionmaker,relationship engine = create_engine('mysql+pymysql://root:python123@192.168.12.100:3306/test')
Base =declarative_base() class Son(Base):
__tablename__ = 'son'
id = Column(Integer,primary_key=True)
name = Column(String())
age = Column(String()) father_id = Column(Integer,ForeignKey('father.id')) class Father(Base):
__tablename__ = 'father'
id = Column(Integer,primary_key=True)
name = Column(String())
age = Column(String())
son = relationship('Son',backref = 'father')
#创建多对多的关系话,得加入那句话:。。。。。 Session = sessionmaker(bind=engine)
session = Session() ret = session.query(Father.name.label('别名'),Son.name.label("儿子名")).join(Son) # print(ret)
f1 = session.query(Father).filter_by(id=).first()
print(f1)
print(f1.son)#这是一个集合【】
print(f1.son[].name) #想拿到每一个值的话就要for循环
s1 = session.query(Son).filter_by(father_id=).first()
# print(s1.father.name)

father-son

#!/usr/bin/env python
# -*- coding:utf- -*- import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey,UniqueConstraint,Index
from sqlalchemy.orm import sessionmaker,relationship engine = create_engine('mysql+pymysql://root:python123@192.168.12.100:3306/test?charset=utf8')
Base =declarative_base() class Men_to_Wemon(Base):
__tablename__ = 'men_to_wemon'
nid = Column(Integer, primary_key=True)
men_id = Column(Integer, ForeignKey('men.id'))
women_id = Column(Integer, ForeignKey('women.id')) class Men(Base):
__tablename__ = 'men'
id = Column(Integer, primary_key=True)
name = Column(String())
age = Column(String())
gf=relationship("Women",secondary=Men_to_Wemon.__table__) class Women(Base):
__tablename__ = 'women'
id = Column(Integer, primary_key=True)
name = Column(String())
age = Column(String())
bf = relationship('Men', secondary=Men_to_Wemon.__table__)
# bf = relationship('Men', secondary=Men_to_Wemon.__table__,backref='gf')
##创建多对多的关系话,得加入那句话:。。。。。sescondary....上面的men
Base.metadata.create_all(engine)
# Base.metadata.drop_all(engine)
"""
.创建完表
.插入数据
.用m1.gf = w1插入数据
"""
Session = sessionmaker(bind=engine)
session = Session() # w1 = Women(name="alex",age="")
# w2 = Women(name="wusir",age="")
# m1 = Men(name="如花",age="")
# m2 = Men(name = "凤姐",age="")
# #
# #
# session.add_all([m1,m2,w1,w2,])
# session.commit()
# #
# mw = Men_to_Wemon(men_id=,women_id=)
# #
# session.add(mw)
# session.commit() #-------------------
m1 = session.query(Men).filter_by(id=).first()#对想
w1 = session.query(Women).all()#对象集合
print(m1.gf)
# m1.gf
# m1.gf是一个列表 # session.add_all([m1,])
# session.commit()

man-women

#!/usr/bin/env python
# -*- coding:utf- -*-
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine # engine = create_engine('sqlite:///dbyuan674uu.db', echo=True)
engine = create_engine('mysql+pymysql://root@127.0.0.1:3306/com?charset=utf8') # 连接已存在的数据库 Base = declarative_base() # 创建ORM的基类 class Men_to_Wemon(Base):
__tablename__ = 'men_to_wemon'
nid = Column(Integer, primary_key=True)
men_id = Column(Integer, ForeignKey('men.id'))
women_id = Column(Integer, ForeignKey('women.id')) class Men(Base):
__tablename__ = 'men'
id = Column(Integer, primary_key=True)
name = Column(String())
age= Column(String())
gf= relationship("Women", secondary=Men_to_Wemon.__table__)
class Women(Base):
__tablename__ ='women'
id = Column(Integer, primary_key=True)
name = Column(String())
age= Column(String())
bf=relationship("Men",secondary=Men_to_Wemon.__table__) Base.metadata.create_all(engine) # 在数据库生成表
# 通过激活sessionmaker的__call__方法来return一个Session实例(Session类下提供了增删改查的具体方法)
Session = sessionmaker(bind=engine)
session = Session()
# m1=Men(name='alex',age=)
# m2=Men(name='wusir',age=)
# w1=Women(name='如花',age=)
# w2=Women(name='铁锤',age=)
# session.add_all([m1,m2,w1,w2,])
# session.commit()
# t1=Men_to_Wemon(men_id=,women_id=) m1=session.query(Men).filter_by(id=).first()
print(m1)
w1=session.query(Women).all()
m1.gf=w1 session.add_all([m1,])
session.commit() # 需要注意的地方:
# 查询时如果不加all,first等,得到的是sql语句,加上后,才是具体的结果;而all的结果是一个列表。
# m1.gf是一个列表,里面存放着符合条件的对象。
# filter与filter_by的区别:filter是拿键值对的参数,filter_by是拿条件判断的参数。

注释

SQLAchemy的更多相关文章

  1. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  2. Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)

    本节内容 1.数据库介绍 2.mysql管理 3.mysql数据类型 4.常用mysql命令 创建数据库 外键 增删改查表 5.事务 6.索引 7.python 操作mysql 8.ORM sqlac ...

  3. Python操作mysql之SQLAchemy(ORM框架)

    SQLAchemy SQLAchemy 解析: SQLAchemy是python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作, 简言之便是:将对象转换成SQ ...

  4. Python自动化运维之18、Python操作 MySQL、pymysql、SQLAchemy

    一.MySQL 1.概述 什么是数据库 ? 答:数据的仓库,和Excel表中的行和列是差不多的,只是有各种约束和不同数据类型的表格 什么是 MySQL.Oracle.SQLite.Access.MS ...

  5. sqlachemy 使用实例

    sqlachemy 是python中关于sql的ORM,他的存在可以消除底层sql引擎的差异,同事也避免了复杂繁琐的sql语句,因此我们在比较大的应用时常使用它,下面是我写的一个例子 #!/usr/b ...

  6. python/SQLAchemy

    python/SQLAchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数 ...

  7. Python操作SQLAchemy

    如果对代码不懂就看这个:http://www.cnblogs.com/jixuege-1/p/6272888.html 本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql O ...

  8. ORM框架之SQLAchemy

    SQLAchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 1.安装 ...

  9. SQLAchemy基础知识

    一.什么是SQLAchemy? SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据 ...

随机推荐

  1. Chrome 控制台console的用法(转)

    下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x", "dir" ...

  2. ZooKeeper 笔记(1) 安装部署及hello world

    先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.org/doc/r3.4.6/zookeeperOver.html Get ...

  3. ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程

    环境:OS X 10.10.5 + JDK 1.8 步骤: 一.下载ELK的三大组件 Elasticsearch下载地址: https://www.elastic.co/downloads/elast ...

  4. C#基础系列——再也不用担心面试官问我“事件”了

    前言:作为.Net攻城狮,你面试过程中是否遇到过这样的问题呢:什么是事件?事件和委托的区别?既然事件作为一种特殊的委托,那么它的优势如何体现?诸如此类...你是否也曾经被问到过?你又是否都答出来了呢? ...

  5. sql 关于查询时 出现的 从数据类型 varchar 转换为 numeric 时出错 的解决方法。

    出现这种问题 一般是查询时出现了 varchar 转 numeric 时出了错  或varchar字段运算造成的 解决方法: 让不能转的数不转换就可以了 sql的函数有个isNumeric(参数) 用 ...

  6. 深入理解图优化与g2o:g2o篇

    内容提要 讲完了优化的基本知识,我们来看一下g2o的结构.本篇将讨论g2o的代码结构,并带着大家一起写一个简单的双视图bundle adjustment:从两张图像中估计相机运动和特征点位置.你可以把 ...

  7. TWRP基于omnirom 6.0.1编译教程

    1.环境搭配 参照CM13.0编译笔记http://www.cnblogs.com/dinphy/p/5670293.html 参照SM 2.0 编译笔记http://www.cnblogs.com/ ...

  8. 5.Android消息推送机制简单例子

    1.首先布局文件xml代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout x ...

  9. 【BZOJ-3747】Kinoman 线段树

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 715  Solved: 294[Submit][Stat ...

  10. 浅谈CSRF攻击方式

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...