加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

SQLAlchemy

发布时间:2020-12-17 00:01:26 所属栏目:Python 来源:网络整理
导读:一、sqlalchemy SQLAlchemy是python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用该关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 ?Dialect用于和数据API进行交流,根据配置文件的不同调

一、sqlalchemy

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

?Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

MySQL-+mysqldb://:@[:]/pymysql
mysql
+pymysql://:@/[?<span style="color: #000000">]

MySQL-<span style="color: #000000">Connector
mysql+mysqlconnector://:@[:]/<span style="color: #000000">

cx_Oracle
oracle+cx_oracle://user:<span style="color: #0000ff">pass@host:port/dbname[?key=value&key=<span style="color: #000000">value...]

使用 Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 进行数据库操作。Engine使用Schema Type创建一个特定的结构对象,之后通过SQL Expression Language将该对象转换成SQL语句,然后通过?ConnectionPooling 连接数据库,再然后通过?Dialect 执行SQL,并获取结果。

创建表

sqlalchemy.ext.declarative sqlalchemy sqlalchemy.orm sqlalchemy engine=create_engine(<span style="color: #800000">"<span style="color: #800000">mysql+pymysql://root:123456@127.0.0.1:3306/db1?charset=utf8<span style="color: #800000">",max_overflow=5<span style="color: #000000">)
Base
= declarative_base() <span style="color: #008000">#
<span style="color: #008000"> 生成orm基类

<span style="color: #008000">#<span style="color: #008000"> 创建单表
<span style="color: #0000ff">class<span style="color: #000000"> User(Base):
<span style="color: #800080">tablename = <span style="color: #800000">'<span style="color: #800000">users<span style="color: #800000">' <span style="color: #008000">#<span style="color: #008000"> 表名
id = Column(Integer,primary_key=True,autoincrement=True) <span style="color: #008000">#<span style="color: #008000"> 主键自增
name = Column(String(50),index=True,nullable=True) <span style="color: #008000">#<span style="color: #008000"> 创建索引并不能为空
extra = Column(String(50<span style="color: #000000">))

</span><span style="color: #800080"&gt;__table_args__</span> =<span style="color: #000000"&gt; (
    UniqueConstraint(</span><span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;id</span><span style="color: #800000"&gt;'</span>,<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;name</span><span style="color: #800000"&gt;'</span>,name=<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;uix_id_name</span><span style="color: #800000"&gt;'</span>),<span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 联合唯一索引</span>
    Index(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;ix_id_name</span><span style="color: #800000"&gt;'</span>,<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;extra</span><span style="color: #800000"&gt;'</span>),<span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 联合索引</span>

<span style="color: #000000"> )

<span style="color: #008000">#<span style="color: #008000"> 一对多
<span style="color: #0000ff">class<span style="color: #000000"> Colour(Base):
<span style="color: #800080">tablename = <span style="color: #800000">'<span style="color: #800000">colour<span style="color: #800000">' <span style="color: #008000">#<span style="color: #008000"> 表名
cid = Column(Integer,autoincrement=<span style="color: #000000">True)
colour = Column(String(20),server_default=<span style="color: #800000">'<span style="color: #800000">red<span style="color: #800000">',unique=<span style="color: #000000">True)

<span style="color: #0000ff">class<span style="color: #000000"> Dress(Base):
<span style="color: #800080">tablename = <span style="color: #800000">'<span style="color: #800000">dress<span style="color: #800000">' <span style="color: #008000">#<span style="color: #008000"> 表名
did = Column(Integer,primary_key=<span style="color: #000000">True)
name = Column(String(32),nullable=<span style="color: #000000">True)
colour_id =<span style="color: #000000"> Column(Integer,ForeignKey(Colour.cid))

<span style="color: #008000">#<span style="color: #008000"> 多对多
<span style="color: #0000ff">class<span style="color: #000000"> Group(Base):
<span style="color: #800080">tablename = <span style="color: #800000">'<span style="color: #800000">group<span style="color: #800000">'<span style="color: #000000">
id = Column(Integer,primary_key=<span style="color: #000000">True)
name = Column(String(64),unique=True,nullable=<span style="color: #000000">False)

<span style="color: #0000ff">class<span style="color: #000000"> Server(Base):
<span style="color: #800080">tablename = <span style="color: #800000">'<span style="color: #800000">server<span style="color: #800000">'<span style="color: #000000">
id = Column(Integer,autoincrement=<span style="color: #000000">True)
hostname = Column(String(64),nullable=<span style="color: #000000">False)

<span style="color: #0000ff">class<span style="color: #000000"> ServerToGroup(Base):
<span style="color: #800080">tablename = <span style="color: #800000">'<span style="color: #800000">servertogroup<span style="color: #800000">'<span style="color: #000000">
nid = Column(Integer,autoincrement=<span style="color: #000000">True)
server_id = Column(Integer,ForeignKey(<span style="color: #800000">'<span style="color: #800000">server.id<span style="color: #800000">'<span style="color: #000000">))
group_id = Column(Integer,ForeignKey(<span style="color: #800000">'<span style="color: #800000">group.id<span style="color: #800000">'<span style="color: #000000">))

<span style="color: #0000ff">def<span style="color: #000000"> init_db():
Base.metadata.create_all(engine) <span style="color: #008000">#<span style="color: #008000"> 创建表结构
<span style="color: #000000">

init_db()

Foreignkey的2种写法的区别:

使用第一种方法要注意顺序,第二种不用。

user_type_id = Column(Integer,ForeignKey(UserType.user_type_id)) user_type_id = Column(Integer,ForeignKey())

也可以在类下面加上这个方法:

目的是在我们查询的时候,都显示的是方法,如果把该方法加入到相关类下面,返回的就是数据了

= % tmp

删除表

二、最基本的增删改查

<span style="color: #008000">#<span style="color: #008000"> session.add_all([<span style="color: #008000">

<span style="color: #008000"> Users(name='小egon'),<span style="color: #008000">

<span style="color: #008000"> Users(name='eric')<span style="color: #008000">

<span style="color: #008000"> ])<span style="color: #008000">

<span style="color: #008000"> session.commit()

<span style="color: #008000">#<span style="color: #008000"> 2. 查<span style="color: #008000">

<span style="color: #008000"> result = session.query(Users).all()<span style="color: #008000">

<span style="color: #008000"> for row in result:<span style="color: #008000">

<span style="color: #008000"> print(row.id,row.name)

<span style="color: #008000">#<span style="color: #008000"> result = session.query(Users).filter(Users.id >= 2)<span style="color: #008000">

<span style="color: #008000"> for row in result:<span style="color: #008000">

<span style="color: #008000"> print(row.id,row.name)

<span style="color: #008000">#<span style="color: #008000"> result = session.query(Users).filter(Users.id >= 2).first()<span style="color: #008000">

<span style="color: #008000"> print(result)

<span style="color: #008000">#<span style="color: #008000"> 3.删<span style="color: #008000">

<span style="color: #008000"> session.query(Users).filter(Users.id >= 2).delete()<span style="color: #008000">

<span style="color: #008000"> session.commit()

<span style="color: #008000">#<span style="color: #008000"> 4.改<span style="color: #008000">

<span style="color: #008000"> session.query(Users).filter(Users.id == 4).update({Users.name:'egon'})<span style="color: #008000">

<span style="color: #008000"> session.query(Users).filter(Users.id == 4).update({'name':'小egon'})<span style="color: #008000">

<span style="color: #008000"> session.query(Users).filter(Users.id == 4).update({'name':Users.name+"dsb"},synchronize_session=False)<span style="color: #008000">

<span style="color: #008000"> session.commit()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读