在sqlalchemy中常见的数据库操作:
db.session.delete(object)
db.session.update(object)
object.query.all()
如果想要使用原生的sql语句,则执行以下命令
db.session.execute(sql)
比如:
db.session.execute("select * from users")
建立一个user表:
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
email = db.Column(db.String(120), index=True, unique=True)
name = db.Column(db.String(20))
password_hash = db.Column(db.String(128))
phone = db.Column(db.String(16))
一般情况下我们都是根据User进行操作,比如User.query.all()
但是当我们只能获得__tablename__这个变量的值的时候我们应该怎么对数据库进行操作呢?如下:
init.py
from sqlalchemy import MetaData
meta = MetaData()
def create_app(config_class=Config):
back_engine = db.get_engine(app)
meta.reflect(bind=back_engine)
routes.py
from app import db, meta
base_meta = meta
table = base_meta.tables['__tablename__']
sql = table.update().where(条件).values({'phone':12321123123})
db.session.execute(sql)
sql = table.insert().values(值)
db.session.execute(sql)
很少用table.select ,关于select的两种方式:
origin_id=db.session.query(table).with_entities().filter(table.c.phone.isnot(None)).all()
或者
stmt = select([table.c.phone,],table.c.phone.isnot(None))
result= db.session.execute(stmt).fetchall()