Date:2016-03-27
Title:20.Python笔记之SqlAlchemy使用
Tags:python
Category:Python

作者:刘耀
博客:www.liuyao.me

一、SQLAlchemy

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

ORM方法论基于三个核心原则:

简单:以最基本的形式建模数据。

传达性:数据库结构被任何人都能理解的语言文档化。

精确性:基于数据模型创建正确标准化了的结构。

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

注:

2.7版本使用mysqldb
3.5版本使用pymysql
请用pip或者源码包安装,确保环境可以正常使用。**
确保远程数据库服务器可以正常使用,并且拥有全新可以远程登录,
例如:
登录数据库:mysql -uroot   -p
创建数据库:create database liuyao;
授权库:grant all on liuyao.* to liuyao@"%" identified by 'liuyao';
更新:flush privileges;

1.基本操作:

1)链接数据库:create_engine()

engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/liuyao", max_overflow=5)create_engine() 会返回一个数据库引擎,
mysql+mysqldb”指定了使用 MySQL-Python 来连接,
使用用户名‘liuyao’和密码‘liuyao’来链接数据库
121.42.195.15是数据库链接地址可以是localhost,127.0.0.1
‘liuyao’是数据库名
max_overflow是最大连接数
其他方法:
“charset”指定了连接时使用的字符集(可省略)=utf8echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。

2)字段和数据类型及操作方法

在sqlalchemy.schema包里有数据库关系的描述,列举几个最常用的:

字段:Column

索引:Index

表:Table

数据类型在sqlalchemy.types包,列举几个最常用的:

二进制:BIGINT

布尔:BOOLEAN

字符:CHAR

可变字符:VARCHAR

日期:DATETIME

其他方法 execute,update,insert,select,delete,join等 自行补脑

3)创建表结构

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

from sqlalchemy import create_engine, Table, Column, Integer, /
String, MetaData, ForeignKey
import MySQLdb
#创建数据库连接
engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/liuyao", max_overflow=5)
# 获取元数据
metadata = MetaData()
# 定义表
user = Table('user', metadata,Column('id', Integer, primary_key=True),Column('name', String(20)),)color = Table('color', metadata,Column('id', Integer, primary_key=True),Column('name', String(20)),)
# 创建数据表,如果数据表存在,则忽视
metadata.create_all(engine)
结果:
mysql> show tables;
+------------------+
| Tables_in_liuyao |
+------------------+
| color            |
| user             |
+------------------+
2 rows in set (0.00 sec)

3)插入一条数据

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

#!/usr/bin/env python3
#coding:utf8
from sqlalchemy import create_engineengine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/
liuyao", max_overflow=5)
engine.execute("INSERT INTO liuyao.color(id, name) VALUES ('1', 'liuyao');"
)
result = engine.execute('select * from color')
print(result.fetchall())
结果:
[(1L, 'liuyao'), (2L, 'v1')]

4) 增删改查

先创建数据库

#!/usr/bin/env python3
#coding:utf8
from sqlalchemy import create_engine, Table, Column, Integer, String,MetaData, ForeignKey
metadata = MetaData()
#创建数据库引擎
engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/
liuyao", max_overflow=5)
conn = engine.connect()
#创建一个表叫做user 在liuyao库里
user = Table('user', metadata,Column('id', Integer, primary_key=True),Column('name', String(20)),
)
color = Table('color', metadata,Column('id', Integer, primary_key=True),Column('name', String(20)),
)
metadata.create_all(engine)

增加

# 创建SQL语句,INSERT INTO "user" (id, name) VALUES (:id, :name)
conn.execute(user.insert(),{'id':7,'name':'seven'})
conn.close()
# 或者按照下面的方式创建
# sql = user.insert().values(id=123, name='wu')
# conn.execute(sql)
# conn.close()
结果:
mysql> show tables;
+------------------+
| Tables_in_liuyao |
+------------------+
| color            |
| user             |
+------------------+
2 rows in set (0.00 sec)mysql> select * from user;
+----+-------+
| id | name  |
+----+-------+
|  7 | seven |
+----+-------+
1 row in set (0.00 sec)

删除

#删除一条user表里的 条件是id大于1的
sql = user.delete().where(user.c.id > 1)
#执行
conn.execute(sql)
#关闭链接
conn.close()
结果:
mysql> select * from user;
Empty set (0.00 sec)mysql>
#因表里只有一条数据,删除之后,没有任何数据存在

修改/更新

先创建几条数据步骤略
显示如下:
mysql> select * from user;
+----+--------+
| id | name   |
+----+--------+
|  1 | liuyao |
|  2 | liuyao |
|  3 | yaoyao |
|  4 | yao    |
+----+--------+
4 rows in set (0.00 sec)
#更新
#把名字为liuyao的修改为no1
sql = user.update().where(user.c.name == 'liuyao').values(name='no1')
conn.execute(sql)
conn.close()
结果:
mysql> select * from user;
+----+--------+
| id | name   |
+----+--------+
|  1 | no1    |
|  2 | no1    |
|  3 | yaoyao |
|  4 | yao    |
+----+--------+
4 rows in set (0.00 sec)

查询

注:请导入查询模块

from sqlalchemy import select 其他模块同上
#查询user表里的内容
sql = select([user, ])
res =conn.execute(sql)
print res.fetchall()
conn.close()
结果:
[(1L, 'no1'), (2L, 'no1'), (3L, 'yaoyao'), (4L, 'yao')]
#查询user表下的id
sql = select([user.c.id, ])
res =conn.execute(sql)
print res.fetchall()
conn.close()
结果:
[(1L,), (2L,), (3L,), (4L,)]
#查询user表和color表的name,条件是user表的id1=color的id1
sql = select([user.c.name, color.c.name]).where(user.c.id==color.c.id)
结果:
[('no1', 'liuyao'), ('no1', 'v1')]
#查询user表的name,并按照条件排序
#按照名字排序
sql = select([user.c.name]).order_by(user.c.name)
res =conn.execute(sql)
print res.fetchall()
conn.close()
结果:
[('no1',), ('no1',), ('yao',), ('yaoyao',)]
#按照id排序
sql = select([user.c.name]).order_by(user.c.id)
res =conn.execute(sql)
print res.fetchall()
conn.close()
结果:
[('no1',), ('no1',), ('yaoyao',), ('yao',)]
#查询user表的name,并按照条件分组
sql = select([user]).group_by(user.c.name)
res =conn.execute(sql)
print res.fetchall()
conn.close()
结果:
[(1L, 'no1'), (4L, 'yao'), (3L, 'yaoyao')]
#按照id
结果:
[(1L, 'no1'), (2L, 'no1'), (3L, 'yaoyao'), (4L, 'yao')]

5)继承SqlORM类来操作数据库

#!/usr/bin/env python3
#coding:utf8
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from  sqlalchemy.orm import sessionmaker
Base = declarative_base() #生成一个SqlORM 基类
engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/liuyao",echo=True)
#echo如果为True,那么当他执行整个代码的数据库的时候会显示过程
#创建一个类继承Base基类
class Host(Base):#表名为hosts__tablename__ = 'hosts'#表结构#primary_key等于主键#unique唯一#nullable非空id = Column(Integer,primary_key=True,autoincrement=True)hostname = Column(String(64),unique=True,nullable=False)ip_addr = Column(String(128),unique=True,nullable=False)port = Column(Integer,default=22)Base.metadata.create_all(engine) #创建所有表结构if __name__ == '__main__':SessionCls = sessionmaker(bind=engine)#bind绑定#创建与数据库的会话session class #注意,这里返回给session的是个class,不是实例 session = SessionCls()#插入字段h1 = Host(hostname='qd115',ip_addr='115.29.51.8')h2 = Host(hostname='ubuntu',ip_addr='139.129.5.191',port=80)h3 = Host(hostname='mysql',ip_addr='121.42.195.15',port=3306)#添加一个#session.add(h3)#可以添加多个字段session.add_all( [h1,h2,h3])#修改字段名字,只要没提交,此时修改也没问题#h2.hostname = 'ubuntu_test'#支持数据回滚#session.rollback()#提交session.commit()结果:
mysql> select * from hosts;
+----+----------+---------------+------+
| id | hostname | ip_addr       | port |
+----+----------+---------------+------+
|  1 | qd115    | 115.29.51.8   |   22 |
|  2 | ubuntu   | 139.129.5.191 |   80 |
|  4 | mysql    | 121.42.195.15 | 3306 |
+----+----------+---------------+------+
3 rows in set (0.00 sec)

注:SQLAlchemy无法修改表结构,如果需要可以使用SQLAlchemy开发者开源的另外一个软件Alembic来完成。

6.继承类式增删改查:

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

Query对象可以返回可迭代的值(iterator value),然后我们可以通过for in来查询。不过Query对象的all()、one()以及first()方法将返回非迭代值(non-iterator value),比如说all()返回的是一个列表first()方法限制并仅作为标量返回结果集的第一条记录:

1)先创建相关数据库

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
#创建数据库
engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/liuyao", max_overflow=5)
#生成一个SqlORM 基类
Base = declarative_base()
#定义表结构
class User(Base):#表名__tablename__ = 'users'#定义id,主键唯一,id = Column(Integer, primary_key=True)name = Column(String(50))
#寻找Base的所有子类,按照子类的结构在数据库中生成对应的数据表信息
Base.metadata.create_all(engine)
#创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = sessionmaker(bind=engine)
session = Session()
#获取session,然后把对象添加到session,
#最后提交并关闭。Session对象可视为当前数据库连接。

2.增加

########### 增 ##########
#定义一个字段
zengjia = User(id=2, name='sbliuyao')
#添加字段
session.add(zengjia)
#添加多个字段
session.add_all([User(id=3, name='sbyao'),User(id=4, name='liuyao')
])
#提交以上操作
session.commit()结果:
mysql> select * from users;
+----+----------+
| id | name     |
+----+----------+
|  2 | sbliuyao |
|  3 | sbyao    |
|  4 | liuyao   |
+----+----------+
3 rows in set (0.00 sec)

3.删除

# ########## 删除 ##########
#删除user表,id大于2的字段
session.query(User).filter(User.id > 2).delete()
session.commit()
结果:
mysql> select * from users;
+----+----------+
| id | name     |
+----+----------+
|  2 | sbliuyao |
+----+----------+
1 row in set (0.00 sec)

4.修改

因上次操作已经删除好多数据
请重新执行插入字段操作
session.add_all([User(id=3, name='sbyao'),User(id=4, name='liuyao'),User(id=5, name='mayun')
])
session.commit()
结果:
mysql> select * from users;
+----+----------+
| id | name     |
+----+----------+
|  2 | sbliuyao |
|  3 | sbyao    |
|  4 | liuyao   |
|  5 | mayun    |
+----+----------+
4 rows in set (0.00 sec)在执行以下操作
#user表里的id等于2的字段修改为id=6
session.query(User).filter(User.id == 2).update({'id' : 6})
session.commit()
结果:
mysql> select * from users;
+----+----------+
| id | name     |
+----+----------+
|  3 | sbyao    |
|  4 | liuyao   |
|  5 | mayun    |
|  6 | sbliuyao |
+----+----------+
4 rows in set (0.00 sec)
其他方法:
#把user表里id大于2的name全部换成woshiyaoge
session.query(User).filter(User.id > 2).update({'name' :'woshiyaoge'})
session.commit()mysql> select * from users;
+----+------------+
| id | name       |
+----+------------+
|  3 | woshiyaoge |
|  4 | woshiyaoge |
|  5 | woshiyaoge |
|  6 | woshiyaoge |
+----+------------+
4 rows in set (0.00 sec)

5.查询

数据库如下:
mysql> select * from users;
+----+------------+
| id | name       |
+----+------------+
|  3 | woshiyaoge |
|  4 | woshiyaoge |
|  5 | woshiyaoge |
|  6 | woshiyaoge |
|  7 | sbyao      |
|  8 | liuyao     |
|  9 | mayun      |
+----+------------+
7 rows in set (0.00 sec)方式1:#查询user表下面name=liuyao的字段
ret = session.query(User).filter_by(name='liuyao').all()
#打印实例
print ret
for i in ret:
#打印结果
print(i.id,i.name,)
结果:
[<__main__.User object at 0x0000000002F55860>]
(8L, 'liuyao')
这种查询方法可以返回一个User对象以及它的name属性字段的值。方式2:
#查询user表里字段是name=liuyao的第一条数据
ret = session.query(User).filter_by(name='liuyao').first()
print ret.name
print ret.id
结果:
liuyao
8方式3:
#查询user表里字段是name是liuyao或者mayun的信息打印出来
ret = session.query(User).filter(User.name.in_(['liuyao','mayun'])).all()
print ret
for i in ret:print(i.name,i.id)
结果:
[<__main__.User object at 0x00000000030F1E48>, <__main__.User object at 0x000000000311D8D0>]
('liuyao', 8L)
('mayun', 9L)方式4:
#可以给返回的结果起一个别名,或者叫标签:可有可无
ret = session.query(User.name.label('')).all()
print ret,type(ret)
这里的关键是label方法,它的意思是把User的name字段改个名字叫name_label,
其相当于执行以下的SQL语句:
SELECT users.name AS name_label
FROM users
结果:
[('woshiyaoge',), ('woshiyaoge',), ('woshiyaoge',), ('woshiyaoge',), ('sbyao',), ('liuyao',), ('mayun',)] <type 'list'>方式5:
#查询User表根据id排序
ret = session.query(User).order_by(User.id).all()
print ret
for i in ret:
print(i.name)
结果:
[<__main__.User object at 0x00000000031978D0>, <__main__.User object at 0x0000000003197978>, <__main__.User object at 0x00000000031979E8>, <__main__.User object at 0x0000000003197A58>, <__main__.User object at 0x000000000316BE10>, <__main__.User object at 0x000000000316BE48>, <__main__.User object at 0x0000000003197940>]
woshiyaoge
woshiyaoge
woshiyaoge
woshiyaoge
sbyao
liuyao
mayun方式6:
#查询user表里根据id排序输入0到3的字段
ret = session.query(User).order_by(User.id)[0:3]
print ret
for i in ret:
print(i.name)
结果:
[<__main__.User object at 0x00000000030F59E8>, <__main__.User object at 0x00000000030C9E80>, <__main__.User object at 0x00000000030C9C88>]
woshiyaoge
woshiyaoge
woshiyaoge
方式7:
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.id=='5').one()
#打印类型和对象的name属性:
print 'type:', type(user)
print 'name:', user.name

7.外键关联

由于关系数据库的多个表还可以用外键实现一对多、多对多等关联,相应地,ORM框架也可以提供两个对象之间的一对多、多对多等功能。

1)一对多(一个User可以有多个Address)

外键引用relationship()例:
#!/usr/bin/env python3
#coding:utf8
#导入所需模块
from sqlalchemy import create_engine,func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey
from  sqlalchemy.orm import sessionmaker,relationship
#生成sqlorm基类
Base = declarative_base()
#创建数据库连接
engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/liuyao", max_overflow=5)
#目的是一个人可以拥有多本书,那么在数据库里的一对多关系
class User(Base):#表名__tablename__ = 'user'#id字段id = Column(String(20), primary_key=True)#名字字段name = Column(String(20))# 一对多:#内容不是表名而是定义的表结构名字books = relationship('Book')
class Book(Base):#表面__tablename__ = 'book'#id字段id = Column(String(20), primary_key=True)#名字字段name = Column(String(20))# “多”的一方的book表是通过外键关联到user表的:#ForeignKey是外键 关联user表的id字段user_id = Column(String(20), ForeignKey('user.id'))
#创建所需表
Base.metadata.create_all(engine)if __name__ == '__main__':#绑定,生成回话SessionCls = sessionmaker(bind=engine)session = SessionCls()#创建用户liuyao = User(id='1',name='liuyao')ali=User(id='2',name='ali')#添加字段session.add_all([liuyao,ali])#提交session.commit()#创建白鹿原这本书,指定谁是拥有者Whitedeer = Book(id='1',name='White_deer',user_id = '1')#创建三体这本书,指定谁是拥有者Threebody = Book(id='2',name='Three_body',user_id = '2')#添加字段session.add_all([Whitedeer,Threebody])#提交session.commit()

结果:

表:
mysql> show tables;
+------------------+
| Tables_in_liuyao |
+------------------+
| book             |
| user             |
+------------------+rows in set (0.00 sec)user表:
mysql> select * from user;
+----+--------+
| id | name   |
+----+--------+
| 1  | liuyao |
| 2  | ali    |
+----+--------+
2 rows in set (0.00 sec)book表#已经显示关联哪个user表id
mysql> select * from book;
+----+------------+---------+
| id | name       | user_id |
+----+------------+---------+
| 1  | White_deer | 1       |
| 2  | Three_body | 2       |
+----+------------+---------+
2 rows in set (0.00 sec)

2)多对多

建立一个双向一对多关系,“反向”是一个许多人,指定一个额外的relationship()函数
并连接两个使用relationship.back_populates参数
简单来说, relationship函数是sqlalchemy对关系之间提供的一种便利的调用方式, backref参数则对关系提供反向引用的声明。在最新版本的sqlalchemy中对relationship引进了back_populates参数。

先创建数据库:

#!/usr/bin/env python3
#coding:utf8
from sqlalchemy import Column, Sequence, String, Integer, ForeignKey
from sqlalchemy import create_engine # 导入创建连接驱动
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import relationship, backref
# 这个url可以用urlparse解析, 其中echo=True表示执行时显示sql语句
engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/liuyao", max_overflow=5)
#生成了declarative基类, 以后的model继承此类
Base = declarative_base()
class Parent(Base):__tablename__ = 'parent'id = Column(Integer, primary_key=True)name = Column(String(64),unique=True,nullable=False)children = relationship("Child", back_populates="parent")
class Child(Base):__tablename__ = 'child'id = Column(Integer, primary_key=True)name = Column(String(64),unique=True,nullable=False)parent_id = Column(Integer, ForeignKey('parent.id'))parent = relationship("Parent", back_populates="children")
Base.metadata.create_all(engine) #创建所有表结构
if __name__ == '__main__':
SessionCls = sessionmaker(bind=engine)
#创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
session = SessionCls()
mama = Parent(id='1',name='mamaxx')
baba = Parent(id='2',name='babaoo')
session.add_all([mama,baba])
# onesb = Child(id='1',name='onesb',parent_id='2')
# twosb = Child(id='2',name='twosb',parent_id='2')
#session.add_all([onesb,twosb])
session.commit()

3.)多对多之三表外键关联

#!/usr/bin/env python3
#coding:utf8
from sqlalchemy import create_engine,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()
#关系表
Host2Group = Table('host_2_group',Base.metadata,Column('host_id',ForeignKey('hosts.id'),primary_key=True),Column('group_id',ForeignKey('group.id'),primary_key=True),)
engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/liuyao", max_overflow=5)
class Host(Base):__tablename__ = 'hosts'id = Column(Integer,primary_key=True,autoincrement=True)hostname = Column(String(64),unique=True,nullable=False)ip_addr = Column(String(128),unique=True,nullable=False)port = Column(Integer,default=22)groups = relationship('Group',secondary= Host2Group,backref = 'host_list')
class Group(Base):__tablename__ = 'group'id = Column(Integer,primary_key=True)name = Column(String(64),unique=True,nullable=False)if __name__ == '__main__':SessionCls = sessionmaker(bind=engine)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()

SqlAlchemy使用相关推荐

  1. SQLALchemy之Python连接MySQL

    20220225 https://www.cnblogs.com/toheart/p/9802990.html pymssql连接sqlserver https://blog.csdn.net/qq_ ...

  2. Python的数据库操作(Sqlalchemy)

    ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...

  3. 04:sqlalchemy操作数据库 不错

    目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...

  4. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  5. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...

  6. 自动获取mysql建表语句_脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明...

    常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...

  7. ORM 框架中SQLALCHEMY一点点个人总结

    声明:工作原因涉及一点 What is ORM 答: object relation mapping 一种实现对象与数据库中的关系表映射的中间件.ORM 框架中最有名的是SQLALCHEMY 具体使用 ...

  8. Python之Mysql及SQLAlchemy操作总结

    一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...

  9. sqlalchemy数据库中的offset偏移查询的使用

    文章目录 1.实验结果: 2.主文件main.py: 1.实验结果: 2.主文件main.py: from flask_wtf import FlaskForm from flask_sqlalche ...

  10. sqlalchemy数据库中的limit使用(限制查询的用户数量)

    文章目录 1.实验结果: 2.主文件:main.py: 1.实验结果: 2.主文件:main.py: from flask_wtf import FlaskForm from flask_sqlalc ...

最新文章

  1. (基础篇)数组的详解与使用
  2. flutter开发vscode插件推荐(开发必备)
  3. ORA-01109:数据库无法启动问题
  4. spark编译错误解决 Error:(52, 75) not found: value TCLIService
  5. oracle+资料类型不一致吗,oracle数据库中,字段类型不一致,导致查询慢
  6. 如何修改服务器标题,修改DEDECMS网页TITLE标签的方法
  7. 代码中一些经常使用的小技巧
  8. Raid Level,该如何为Oracle存储选择才好?
  9. Lucene开发(一):快速入门
  10. HDU 5935 2016CCPC杭州 C: Car
  11. java8中一个极其强悍的新特性Stream(非常实用)
  12. PLC(可编程逻辑控制器)
  13. python 多因素方差分析_SPSS分析技术:多元方差分析
  14. NFC模组,开发NFC功能 只要几条指令的事情
  15. Adobe Premiere基础特效(卡点和转场)(四)
  16. Floyd算法、Dijkstra算法例题
  17. 论基于DSSA的软件架构设计与应用
  18. gre vim linux,OVS搭建GRE隧道和VXLAN
  19. nginx配置文件结构1
  20. 利用twitter官网提供的api 及tweepy库 爬取tweets

热门文章

  1. 联想电脑管家 锁屏壁纸目录
  2. nvm 配置国内镜像
  3. Excel导入数据,时间处理
  4. 开影Precision 128 Max精密断层能谱CT获得NMPA注册证
  5. Solaris、Linux和FreeBSD的内核比较
  6. 阿里巴巴面试常用问题
  7. 画图说明计算机控制系统的硬件组成,2019年4月自学考试微机控制技术真题
  8. 揭秘机器人的神经网络-工业POE交换机
  9. 大多数人,都是怎样挥霍自己天赋的
  10. 学习笔记 -- 四元数:$v‘= qvq^{-1}$,证明v‘为虚四元数