Python与数据库[2] -> 关系对象映射/ORM[1] -> sqlalchemy 的基本使用示例
sqlalchemy 的基本使用示例
下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数。
完整代码如下:
from sqlalchemy import create_engine, exc, orm
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.schema import Table, ForeignKey, Column
from sqlalchemy.sql.sqltypes import Integer, VARCHAR
from sqlalchemy.dialects.mysql.base import TINYINT
from sqlalchemy.orm import relationship # declarative_base function will return a class which using active record pattern
# It will combine object opeartion and data operation automatically
Base = declarative_base() dsn = 'mysql://root:root@localhost/test_db' # Create table based on Base obj
class AccountStore(Base):
__tablename__ = 'account_store'
account_id = Column(Integer, primary_key=True)
items = Column(VARCHAR(20))
account = Column(VARCHAR(50))
password = Column(VARCHAR(50))
print(type(AccountStore))
class SqlalchemyActor():
def __init__(self, dsn):
try:
engine = create_engine(dsn)
except ImportError:
raise RuntimeError
engine.connect() # sessionmaker is a factory obj, generate a Session instance, reload __call__ function
# __call__ function will return a session class each time
Session = orm.sessionmaker(bind=engine)
# use Session() to create a class, and assign it to a attribute
self.session = Session()
# Assign costom table and engine to attribute
self.account = AccountStore
self.engine = engine
# Bind engine and table
# Method one: assign manually one by one
self.account.metadata.bind = engine
# Method two: use reflect to map all/partly Table schema
#Base.metadata.reflect(engine) ses = SqlalchemyActor(dsn) def printf(items):
for i in items:
print(i)
print(30*'-') def printfx(items):
for i in items:
print(i.__dict__)
print(30*'-') # execute(SQL)
re = ses.session.execute('SELECT * FROM account_store')
printf(re)
# query(table_name)
# query function similar to Connection.query / Cursor.execute in SQL adaptor
# query(Account) equal to SELECT * FROM acount_store
re = ses.session.query(AccountStore)
print(type(re), re)
printfx(re) # query(table_name.column_name)
# SELECT items FROM account_store
re = ses.session.query(AccountStore.items)
print(re)
printf(re) sq = ses.session.query(AccountStore) # all() / one() / first():
# source code does similar to: lambda x: list(x)
print(type(sq))
print(type(sq.all())) # filter()
# SELECT * FROM account_store WHERE account_store.items = 'WeChat'
re = sq.filter(AccountStore.items=='WeChat')
print(re)
printfx(re) # filter_by()
# SELECT * FROM account_store WHERE account_store.items = 'WeChat'
re = sq.filter_by(items='WeChat')
print(re)
printfx(re) # order_by()
# SELECT * FROM account_store ORDER BY account_store.items
re = sq.order_by(AccountStore.items)
print(re)
printfx(re) # desc()
# SELECT * FROM account_store ORDER BY account_store.items DESC
re = sq.order_by(AccountStore.items.desc())
print(re)
printfx(re) # limit(): select next 3 values
# SELECT * FROM account_store LIMIT 3
re = sq.limit(3)
print(re)
printfx(re) # offset(): select from 3rd values
# SELECT * FROM table_name OFFSET 2
re = sq.offset(2)
print(re)
printfx(re) # select from 3rd and next 3 values
re = sq.limit(3).offset(2) # equal to re = sq.offset(2).limit(3)
print(re)
printfx(re)
re = sq[2:5] # equal to re = sq.offset(2).limit(3)
print(re)
printfx(re) # DELETE value
re = sq.filter(AccountStore.account_id==8).delete()
print(re) # 0 fail, 1 success
re = sq.filter(AccountStore.account_id==9).delete()
print(re) # 0 fail, 1 success
re = sq.filter(AccountStore.account_id==10).delete()
print(re) # 0 fail, 1 success # INSERT value
# Not ORM
ses.session.execute(AccountStore.__table__.insert(), {'items': 'KUBO', 'account': 'STAR', 'password': '1d2345', 'account_id': 10})
# Below code is an expression of SQL
sql = ses.account.__table__.insert([{'items': 'Ericsson', 'account': 'EKELIKE', 'password': '', 'account_id': 8}, {'items': 'MOMO', 'account': 'sad', 'password': '', 'account_id': 9}])
ses.session.execute(sql) # SELECT value
re = sq.get(9)
print(re)
# Modify value
re.password = 1293 # Count values
re = sq.count()
print(re) ses.session.commit()
ses.session.close()
分段分析:
首先对所需要的模块进行导入
from sqlalchemy import create_engine, exc, orm
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.schema import Table, ForeignKey, Column
from sqlalchemy.sql.sqltypes import Integer, VARCHAR
from sqlalchemy.dialects.mysql.base import TINYINT
from sqlalchemy.orm import relationship
随后利用declarative_base()函数创建一个Base类,并且基于Base类创建AccountStore表的各项信息
# declarative_base function will return a class which using active record pattern
# It will combine object opeartion and data operation automatically
Base = declarative_base() #dsn = 'mssql+pyodbc://ItpReadOnly:@reaedonlyENC@encitp.cn.ao.ericsson.se\itp:0/ITP'
dsn = 'mysql://root:root@localhost/test_db' # Create table based on Base obj
class AccountStore(Base):
__tablename__ = 'account_store'
account_id = Column(Integer, primary_key=True)
items = Column(VARCHAR(20))
account = Column(VARCHAR(50))
password = Column(VARCHAR(50))
建立起一个sql的执行器,创建一个通信引擎,同时利用orm创建出会话对象,并将会话类与通信引擎进行绑定。通过对会话类的实例化产生一个会话实例。同时手动对表的类进行引擎指向(也可利用reflect进行自动指向)。
class SqlalchemyActor():
def __init__(self, dsn):
try:
engine = create_engine(dsn)
except ImportError:
raise RuntimeError
engine.connect() # sessionmaker is a factory obj, generate a Session instance, reload __call__ function
# __call__ function will return a session class each time
Session = orm.sessionmaker(bind=engine)
# use Session() to create a class, and assign it to a attribute
self.session = Session()
# Assign costom table and engine to attribute
self.account = AccountStore
self.engine = engine
# Bind engine and table
# Method one: assign manually one by one
self.account.metadata.bind = engine
# Method two: use reflect to map all/partly Table schema
#Base.metadata.reflect(engine)
接下来对sql执行器进行初始化,并定义两个显示函数用于输出结果。
ses = SqlalchemyActor(dsn) def printf(items):
for i in items:
print(i)
print(30*'-') def printfx(items):
for i in items:
print(i.__dict__)
print(30*'-')
完成上述定义后,首先测试session类的execute函数,该函数可以直接执行SQL语句
# execute(SQL)
re = ses.session.execute('SELECT * FROM account_store')
printf(re)
# query(table_name)
# query function similar to Connection.query / Cursor.execute in SQL adaptor
测试session类的query函数,通过query函数传入表的类,来获取表内的信息,其过程等价于SQL语句中的 SELECT * FROM table_name
# query(Account) equal to SELECT * FROM acount_store
re = ses.session.query(AccountStore)
print(type(re), re)
printfx(re)
对于query函数,若想获取表的其中一列信息,则可以用account_store.item的方式进行,其效果等价于SQL语句的SELECT item FROM account_store
# query(table_name.column_name)
# SELECT items FROM account_store
re = ses.session.query(AccountStore.items)
print(re)
printf(re)
而query函数的返回值通常是一个result类,通过对该类的操作可以获取想要的结果
sq = ses.session.query(AccountStore)
首先是all() / one() / first()函数,分别为获取结果的所有,下一条,第一条项目并返回为list。其中all()函数的源码实现便类似于lambda x: list(x)
# all() / one() / first():
# source code does similar to: lambda x: list(x)
print(type(sq))
print(type(sq.all()))
filter()函数则是一个十分常用的函数,其效果类似于SQL中的WHERE条件子句,通过对filter传入条件语句可以筛选出所需要的结果。类似的filter_by函数则可以以=进行筛选表达
# filter()
# SELECT * FROM account_store WHERE account_store.items = 'WeChat'
re = sq.filter(AccountStore.items=='WeChat')
print(re)
printfx(re) # filter_by()
# SELECT * FROM account_store WHERE account_store.items = 'WeChat'
re = sq.filter_by(items='WeChat')
print(re)
printfx(re)
order_by()函数则类似于SQL中的ORDER BY条件语句,可以对筛选的结果按需求进行顺序排列。当需要倒序排列时,可对排序项目末尾加上.desc()函数
# order_by()
# SELECT * FROM account_store ORDER BY account_store.items
re = sq.order_by(AccountStore.items)
print(re)
printfx(re) # desc()
# SELECT * FROM account_store ORDER BY account_store.items DESC
re = sq.order_by(AccountStore.items.desc())
print(re)
printfx(re)
limit()函数可以对所需要的结果数量进行获取,等价于SQL中的LIMIT条件语句。将会返回当前结果之后的一定数量结果,数量有limit()传入参数确定
# limit(): select next 3 values
# SELECT * FROM account_store LIMIT 3
re = sq.limit(3)
print(re)
printfx(re)
offset()函数将会对结果进行偏移,等价于SQL的OFFSET语句
# offset(): select from 3rd values
# SELECT * FROM table_name OFFSET 2
re = sq.offset(2)
print(re)
printfx(re)
通常会将limit()函数与offset函数组合进行使用,两个函数的顺序不产生影响,而另外一种获取特定行的方式为切片,这种方式更为简洁明了
# select from 3rd and next 3 values
re = sq.limit(3).offset(2) # equal to re = sq.offset(2).limit(3)
print(re)
printfx(re)
re = sq[2:5] # equal to re = sq.offset(2).limit(3)
print(re)
printfx(re)
delete()函数通常用于从表格中删除相应的行或数据,通过filter()函数加上条件语句将需要删除的项目筛选出来后,加上.delete()来删除该项目,该函数会返回一个结果值,0为删除失败,1为删除成功
# DELETE value
re = sq.filter(AccountStore.account_id==8).delete()
print(re) # 0 fail, 1 success
re = sq.filter(AccountStore.account_id==9).delete()
print(re) # 0 fail, 1 success
re = sq.filter(AccountStore.account_id==10).delete()
print(re) # 0 fail, 1 success
insert()函数,可以采用不基于ORM的方式,直接通过会话实例进行执行。对需要插入的表的类中__table__进行insert()函数调用,execute()函数可以接收两个参数,其中第二个参数为前面函数的传入值,通过这种方式进行值的插入
# INSERT value
# Not ORM
ses.session.execute(AccountStore.__table__.insert(), {'items': 'KUBO', 'account': 'STAR', 'password': '1d2345', 'account_id': 10})
还有一种插入的代码方式为直接对account.__table__调用insert()函数,而不通过execute,insert函数接收一个列表,列表的每个元素都是字典形式的数据
# Below code is an expression of SQL
sql = ses.account.__table__.insert([{'items': 'Ericsson', 'account': 'EKELIKE', 'password': '', 'account_id': 8}, {'items': 'MOMO', 'account': 'sad', 'password': '', 'account_id': 9}])
ses.session.execute(sql)
get()函数可以对结果值的特定指数index位置获取结果
# SELECT value
re = sq.get(9)
print(re)
而若是要对表类的属性,即对表格数据进行修改,由于ORM的存在,只需要对返回结果的属性值进行修改并执行commit即可完成
# Modify value
re.password = 1293
count()函数可以返回对结果数量的计数值
# Count values
re = sq.count()
print(re)
最后,对于存在对数据库产生修改性质的操作,均需要commit进行事务确认才能生效,且在结束操作后需要关闭数据库连接
ses.session.commit()
ses.session.close()
上面的代码运行后输出结果如下,内容较多仅供参考,建议逐个运行进行尝试。
<class 'sqlalchemy.ext.declarative.api.DeclarativeMeta'>
('WeChat', 'hereisac', '', 1)
('Qq', 're32isac', '', 2)
('Mail', 're3214ac', '', 3)
('Gmail', 're35c', '123dd5', 4)
('Google', 'rccc', '3dd5', 5)
('MySQL', 'r3c', 'cd5', 6)
('SQLSERVER', 'r3cdasd', 'd5', 7)
('Ericsson', 'EKELIKE', '', 8)
('MOMO', 'sad', '', 9)
('KUBO', 'STAR', '1d2345', 10)
------------------------------
<class 'sqlalchemy.orm.query.Query'> SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store
{'items': 'WeChat', 'password': '', 'account': 'hereisac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048398D0>, 'account_id': 1}
{'items': 'Qq', 'password': '', 'account': 're32isac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839940>, 'account_id': 2}
{'items': 'Mail', 'password': '', 'account': 're3214ac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048399B0>, 'account_id': 3}
{'items': 'Gmail', 'password': '123dd5', 'account': 're35c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839A58>, 'account_id': 4}
{'items': 'Google', 'password': '3dd5', 'account': 'rccc', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839B00>, 'account_id': 5}
{'items': 'MySQL', 'password': 'cd5', 'account': 'r3c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839BA8>, 'account_id': 6}
{'items': 'SQLSERVER', 'password': 'd5', 'account': 'r3cdasd', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839C50>, 'account_id': 7}
{'items': 'Ericsson', 'password': '', 'account': 'EKELIKE', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839CF8>, 'account_id': 8}
{'items': 'MOMO', 'password': '', 'account': 'sad', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839DA0>, 'account_id': 9}
{'items': 'KUBO', 'password': '1d2345', 'account': 'STAR', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839E48>, 'account_id': 10}
------------------------------
SELECT account_store.items AS account_store_items
FROM account_store
('WeChat',)
('Qq',)
('Mail',)
('Gmail',)
('Google',)
('MySQL',)
('SQLSERVER',)
('Ericsson',)
('MOMO',)
('KUBO',)
------------------------------
<class 'sqlalchemy.orm.query.Query'>
<class 'list'>
SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store
WHERE account_store.items = %s
{'items': 'WeChat', 'password': '', 'account': 'hereisac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839278>, 'account_id': 1}
------------------------------
SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store
WHERE account_store.items = %s
{'items': 'WeChat', 'password': '', 'account': 'hereisac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048399B0>, 'account_id': 1}
------------------------------
SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store ORDER BY account_store.items
{'items': 'Ericsson', 'password': '', 'account': 'EKELIKE', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858438>, 'account_id': 8}
{'items': 'Gmail', 'password': '123dd5', 'account': 're35c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048584A8>, 'account_id': 4}
{'items': 'Google', 'password': '3dd5', 'account': 'rccc', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858518>, 'account_id': 5}
{'items': 'KUBO', 'password': '1d2345', 'account': 'STAR', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858588>, 'account_id': 10}
{'items': 'Mail', 'password': '', 'account': 're3214ac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048585F8>, 'account_id': 3}
{'items': 'MOMO', 'password': '', 'account': 'sad', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858668>, 'account_id': 9}
{'items': 'MySQL', 'password': 'cd5', 'account': 'r3c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048586D8>, 'account_id': 6}
{'items': 'Qq', 'password': '', 'account': 're32isac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858748>, 'account_id': 2}
{'items': 'SQLSERVER', 'password': 'd5', 'account': 'r3cdasd', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048587B8>, 'account_id': 7}
{'items': 'WeChat', 'password': '', 'account': 'hereisac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858828>, 'account_id': 1}
------------------------------
SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store ORDER BY account_store.items DESC
{'items': 'WeChat', 'password': '', 'account': 'hereisac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839390>, 'account_id': 1}
{'items': 'SQLSERVER', 'password': 'd5', 'account': 'r3cdasd', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048399B0>, 'account_id': 7}
{'items': 'Qq', 'password': '', 'account': 're32isac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839EF0>, 'account_id': 2}
{'items': 'MySQL', 'password': 'cd5', 'account': 'r3c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048392B0>, 'account_id': 6}
{'items': 'MOMO', 'password': '', 'account': 'sad', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839278>, 'account_id': 9}
{'items': 'Mail', 'password': '', 'account': 're3214ac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839320>, 'account_id': 3}
{'items': 'KUBO', 'password': '1d2345', 'account': 'STAR', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839470>, 'account_id': 10}
{'items': 'Google', 'password': '3dd5', 'account': 'rccc', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839CF8>, 'account_id': 5}
{'items': 'Gmail', 'password': '123dd5', 'account': 're35c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839668>, 'account_id': 4}
{'items': 'Ericsson', 'password': '', 'account': 'EKELIKE', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839C88>, 'account_id': 8}
------------------------------
SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store
LIMIT %s
{'items': 'WeChat', 'password': '', 'account': 'hereisac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839828>, 'account_id': 1}
{'items': 'Qq', 'password': '', 'account': 're32isac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048397B8>, 'account_id': 2}
{'items': 'Mail', 'password': '', 'account': 're3214ac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004839F28>, 'account_id': 3}
------------------------------
SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store
LIMIT %s, 18446744073709551615
{'items': 'Mail', 'password': '', 'account': 're3214ac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048581D0>, 'account_id': 3}
{'items': 'Gmail', 'password': '123dd5', 'account': 're35c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858240>, 'account_id': 4}
{'items': 'Google', 'password': '3dd5', 'account': 'rccc', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048582B0>, 'account_id': 5}
{'items': 'MySQL', 'password': 'cd5', 'account': 'r3c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858320>, 'account_id': 6}
{'items': 'SQLSERVER', 'password': 'd5', 'account': 'r3cdasd', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858390>, 'account_id': 7}
{'items': 'Ericsson', 'password': '', 'account': 'EKELIKE', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858400>, 'account_id': 8}
{'items': 'MOMO', 'password': '', 'account': 'sad', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858470>, 'account_id': 9}
{'items': 'KUBO', 'password': '1d2345', 'account': 'STAR', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048584E0>, 'account_id': 10}
------------------------------
SELECT account_store.account_id AS account_store_account_id, account_store.items AS account_store_items, account_store.account AS account_store_account, account_store.password AS account_store_password
FROM account_store
LIMIT %s, %s
{'items': 'Mail', 'password': '', 'account': 're3214ac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858208>, 'account_id': 3}
{'items': 'Gmail', 'password': '123dd5', 'account': 're35c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858278>, 'account_id': 4}
{'items': 'Google', 'password': '3dd5', 'account': 'rccc', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048582E8>, 'account_id': 5}
------------------------------
[<__main__.AccountStore object at 0x0000000004858390>, <__main__.AccountStore object at 0x0000000004858400>, <__main__.AccountStore object at 0x0000000004858470>]
{'items': 'Mail', 'password': '', 'account': 're3214ac', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048583C8>, 'account_id': 3}
{'items': 'Gmail', 'password': '123dd5', 'account': 're35c', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x0000000004858438>, 'account_id': 4}
{'items': 'Google', 'password': '3dd5', 'account': 'rccc', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000000048584A8>, 'account_id': 5}
------------------------------
1
1
1
<__main__.AccountStore object at 0x0000000004858B38>
10
相关阅读
Python与数据库[2] -> 关系对象映射/ORM[1] -> sqlalchemy 的基本使用示例的更多相关文章
- Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式
sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...
- Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式
sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...
- Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块
ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...
- Python与数据库[2] -> 关系对象映射/ORM[5] -> 利用 sqlalchemy 实现关系表查询功能
利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成. 示例 ...
- Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式
建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...
- 一:ORM关系对象映射(Object Relational Mapping,简称ORM)
狼来的日子里! 奋发博取 10)django-ORM(创建,字段类型,字段参数) 一:ORM关系对象映射(Object Relational Mapping,简称ORM) ORM分两种: DB fir ...
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Stud ...
- MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)
类型别名(typeAliases): 作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度. 类型别名标签typeAliases中可以包含多个typeAlias,如下 < ...
- ORM 关系对象映射 基础知识点
优点: 1.ORM使我们通用的数据库变得更加的简单便捷. 2.可避免新手程序员写sql语句带来的性能问题. 1. 创建单表 2. 创建关键表 1). 一对一 2). 一对多 3). 多对多 创建表的语 ...
随机推荐
- Python urllib模块详解
在Python 2中,有urllib和urllib2两个库来实现请求的发送.而在Python 3中,已经不存在urllib2这个库了,统一为urllib,其官方文档链接为:https://docs.p ...
- 孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库
孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二 ...
- 孤荷凌寒自学python第五天初识python的列表
孤荷凌寒自学python第五天 列表 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 粗俗地区分列表,可以这样理解,定义或print列表后显示时,列表中的各元素都是用一个方括号[]括起来的. ...
- SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13)
SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13) 我可以真见识了 SELinux 的利害了, 这个问题让我找了好长时 ...
- Nginx负载均衡的实现(初级)
不用nginx.conf,新建一个 fzjh.conf (名称自定义) 内容如下: user nobody; # 声明用户为nobody worker_processes 4; # 开启的nginx ...
- Window系统命令行调用控制面板程序
Window系统命令行调用控制面板程序 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name M ...
- 【转】oracle 删除重复记录
转至:http://blog.163.com/aner_rui/blog/static/12131232820105901451809/ 2.保留一条(这个应该是大多数人所需要的 ^_^) Delet ...
- [洛谷P2613]【模板】有理数取余
题目大意:给你$a,b(a,b\leqslant10^{10001})$,求出$\dfrac a b\equiv1\pmod{19260817}$,无解输出 Angry! 题解:在读入的时候取模,若$ ...
- BZOJ5297 [Cqoi2018]社交网络 【矩阵树定理】
题目链接 BZOJ5297 题解 最近这玩意这么那么火 这题要用到有向图的矩阵树定理 主对角线上对应入度 剩余位置如果有边则为\(-1\),不然为\(0\) \(M_{i,i}\)即为以\(i\)为根 ...
- 洛谷 P3396 哈希冲突 解题报告
P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣.他会 ...