이 기사는 python에서 데이터베이스를 작동하는 방법에 대한 예입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
flask_sqlalchemy
낮은 수준의 데이터베이스 작업 지침을 높은 수준의 지침으로 추상화하는 ORM(Object-Relational Mapper) 프레임워크를 사용합니다. 지향적인 운영. 즉, 데이터베이스 엔진을 직접 사용한다면 SQL 연산문을 작성해야 하지만, ORM 프레임워크를 사용하면 테이블, 문서 등의 데이터베이스 엔터티 연산을 Python 객체 연산으로 단순화할 수 있습니다#🎜 🎜## 🎜🎜#SQLAlchemy는 Python 세계에서 ORM의 표준이 되었습니다. Flask는 ORM과 함께 자유롭게 사용할 수 있는 경량 웹 프레임워크입니다. 그 중 Flask-sqlalchemy는 Flask용으로 특별히 지정된 플러그인입니다.
Flask-SQLAlchemy에서는 데이터베이스가 URL을 사용하여 지정됩니다.
MySQL --> mysql://username:password@hostname/database
Installation
pip install flask-sqlalchemy
1. # 🎜🎜#
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:sheen@localhost/zaj_sql' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True)
db.create_all()
admin = User('admin', 'admin@example.com') guest = User('guest', 'guest@example.com')
db.session.add(admin) db.session.add(guest) db.session.commit()
SQLAlchemy는 관계형 데이터의 가장 좋은 점은 관계입니다. 따라서 두 개의 관련 테이블을 예로 사용하는 애플리케이션을 생성하겠습니다. 가장 일반적인 관계는 일대다 관계입니다. 관계는 성립되기 전에 선언되기 때문에 아직 생성되지 않은 클래스를 문자열로 참조할 수 있습니다. 관계는 관계() 함수를 사용하여 표현합니다. 그러나 외래 키는 sqlalchemy.schema.ForeignKey 클래스를 사용하여 별도로 선언해야 합니다.
from datetime import datetime from flask_bootstrap import Bootstrap from flask_wtf import FlaskForm from flask_sqlalchemy import SQLAlchemy from flask import Flask import pymysql from sqlalchemy import desc app = Flask(__name__) db = SQLAlchemy(app) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:sheen@localhost/zaj_sql' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True bootstrap = Bootstrap(app) class User(db.Model): id = db.Column(db.Integer,autoincrement=True,primary_key=True) name = db.Column(db.String(50),unique=True) passwd = db.Column(db.String(100)) add_time = db.Column(db.DATETIME,default=datetime.now()) gender = db.Column(db.BOOLEAN,default=True) role_id = db.Column(db.INTEGER,db.ForeignKey('role.id')) def __repr__(self): return '<user:>' %(self.name) class Role(db.Model): id = db.Column(db.INTEGER,autoincrement=True,primary_key=True) name = db.Column(db.String(50),unique=True) users = db.relationship('User',backref='role') # 给Role模型添加users属性 # backref 是定义反向引用 def __repr__(self): return '<role:>' % (self.name) if __name__ =='__main__': # 1. 创建数据库表 # db.drop_all() # db.create_all() # # 2. 创建role数据库表数据 role_1 = Role(name='超级会员') role_2 = Role(name='普通会员') db.session.add(role_1) db.session.add(role_2) db.session.commit() # # # 3. 添加user表内数据,100个用户,50个为超级会员,50个为普通会员 for i in range(1,13): if i%2 == 0: u = User(name='sheen'+str(i),passwd='sheen',role_id=1) db.session.add(u) else: u = User(name='star'+str(i),passwd='star',role_id=2) db.session.add(u) db.session.commit()</role:></user:>
backref는 역참조를 정의하고 User.role을 통해 Role 개체 및 속성에 액세스할 수 있습니다.
print('角色',Role.query.all()) print('用户',User.query.all())
# select * from tablename where xxx=xxxxx print(User.query.filter_by(role_id=1).all()) print(Role.query.filter_by().all()) print(User.query.filter_by(role_id=2).all())
찾은 데이터 업데이트
print('进行数据更新',end='\n') u =User.query.filter_by(name='sheen2').first() print(u) u.passwd = '123' db.session.add(u) db.session.commit()
필터 데이터 방법 2(필터), 이 메서드는 기본 SQL 문을 볼 수 있습니다
print('数据筛选', end='\n') user = User.query.filter(User.role_id==1) print(user)
쿼리 정보 표시 제한
print('限制查询数据的显示', end='\n') users = User.query.filter_by(role_id=1).limit(3).all() print(users)
쿼리 정보 출력 정렬( 기본적으로 작은 것부터 큰 것까지 정렬), 큰 것에서 작은 것으로 정렬하려는 경우: desc(User.add_time)
print('数据再处理', end='\n') users = User.query.filter_by(role_id=1).order_by(desc(User.name)).all() print(users)
print('多个过滤函数', end='\n') users = User.query.filter_by(role_id=1).order_by(desc(User.name)).limit(3).offset(1).all() print(users) users = User.query.filter_by(role_id=1).order_by(desc(User.name)).slice(1,4).all() print(users)
print('分页显示', end='\n') users = User.query.paginate(1,5) print(users.items) users = User.query.paginate(2, 5) print(users.items)
# 🎜🎜#
위 내용은 플라스크_sqlalchemy가 Python에서 데이터베이스를 작동하는 방법의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!