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

相关阅读


1. ORM 与 sqlalchemy 模块

2. 利用 sqlalchemy 实现关系表查询功能

Python与数据库[2] -> 关系对象映射/ORM[1] -> sqlalchemy 的基本使用示例的更多相关文章

  1. Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式

    sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...

  2. Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式

    sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...

  3. Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块

    ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...

  4. Python与数据库[2] -> 关系对象映射/ORM[5] -> 利用 sqlalchemy 实现关系表查询功能

    利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成. 示例 ...

  5. Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式

    建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...

  6. 一:ORM关系对象映射(Object Relational Mapping,简称ORM)

    狼来的日子里! 奋发博取 10)django-ORM(创建,字段类型,字段参数) 一:ORM关系对象映射(Object Relational Mapping,简称ORM) ORM分两种: DB fir ...

  7. 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】

    old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Stud ...

  8. MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

    类型别名(typeAliases):     作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度.    类型别名标签typeAliases中可以包含多个typeAlias,如下 < ...

  9. ORM 关系对象映射 基础知识点

    优点: 1.ORM使我们通用的数据库变得更加的简单便捷. 2.可避免新手程序员写sql语句带来的性能问题. 1. 创建单表 2. 创建关键表 1). 一对一 2). 一对多 3). 多对多 创建表的语 ...

随机推荐

  1. 《Cracking the Coding Interview》——第2章:链表——题目5

    2014-03-18 02:32 题目:给定两个由单链表表示的数字,返回它们的和.比如(9->9) + (1->2) = 0->2->1,99 + 21 = 120. 解法:逐 ...

  2. sublime text基本配置备份

    sublime text基本配置备份: // Settings in here override those in "Default/Preferences.sublime-settings ...

  3. Python 3基础教程10-全局变量和局部变量

    本文来讲讲全局变量和局部变量,前面学习了函数的基本使用,所以,这里就要注意变量的使用和访问权限. 试试下面的demo.py

  4. 前端初学者——初探Modernizr.js Modernizr.js笔记

    什么是Modernizr? Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库. 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 ...

  5. java初学2

    1.数组操作类Arrays与System public static void arraycopy(Object src, int srcPos, Object dest,int destPos,in ...

  6. leetcode_day03

    https://leetcode-cn.com/problems/container-with-most-water/ 题目:盛水最多的容器 给定 n 个非负整数 a1,a2,...,an,每个数代表 ...

  7. HDU 4667 Building Fence 计算几何 凸包+圆

    1.三角形的所有端点 2.过所有三角形的端点对所有圆做切线,得到所有切点. 3.做任意两圆的外公切线,得到所有切点. 对上述所有点求凸包,标记每个点是三角形上的点还是某个圆上的点. 求完凸包后,因为所 ...

  8. 软工实践 - 第十四次作业 Alpha 冲刺 (5/10)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/9992094.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去 ...

  9. VB.NET——报表

    在工具箱查找ReportViewer,添加. 选择设计新报表: 排列字段,布局的步骤省略. 完成. 接下来,我们可以更改中文标题,设置背景色等,让界面看起来更美观. 如果需要添加参数,所传递的参数要与 ...

  10. 命令__cp、scp(Secure Copy)

    cp命令:区别:硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件: 在文件属性上软链接明确写出 ...