И у Flask, и у Spring Boot есть способы взаимодействия с базами данных. Вот как они сравниваются:
ФЛЯГА:
- SQLAlchemy: Flask обычно работает в паре с SQLAlchemy, Object Relational Mapper (ORM) для Python.
файл app.py:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db' db = SQLAlchemy(app)
Файл Models.py:
class User(db.Model): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def to_dict(self): return { 'id': self.id, 'username': self.username, 'email': self.email } def __repr__(self): return f'<User {self.username}>'
CRUD-операции:
#Create (post request) new_user = User(username='zina', email='[email protected]') db.session.add(new_user) db.session.commit() #Read (get request) users = User.query.all() #Update (patch (update specific fields) /put (replace entire resource with data) request) user = User.query.get(1) user.username = 'zina_in_tech' db.session.commit() #Delete db.session.delete(user) db.session.commit()
ЧЕХОЛ ПРУЖИНЫ
- Spring Data JPA Spring Boot можно интегрировать с Jakarta Persistence API (JPA) и Hibernate с помощью Spring Data JPA, и это обеспечивает способ взаимодействия с базами данных с использованием ORM.
Настраивать:
В build.gradle добавьте зависимости для Spring Data JPA и вашей базы данных (например, H2, MySQL)
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.javafaker:javafaker:1.0.2' runtimeOnly 'com.mysql:mysql-connector-j' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
Модель:
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; @Entity @Table(name = "users") @JsonSerialize(using = UserSerializer.class) //UserSerializer class not provided here public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = "username", unique = true, nullable = false) private String username; @Column(name = "email") private String email; public User(Integer id, String username, String email) { this.id = id; this.username = username; this.email = email; } public User() { } public Integer getid() { return id; } public String getUsername() { return username; } public String getEmail() { return email; } public void setId(Integer id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setEmail(String email) { this.email = email; } public String toString() { return "id:" + this.id + "username:" + this.username + "email:" + this.email; }
Репозиторий:
Spring Data JPA предоставляет концепцию репозиториев, которые представляют собой интерфейсы, позволяющие легко выполнять операции CRUD без написания фактических запросов SQL.
import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Integer> { }
CRUD-операции:
@Autowired private UserRepository userRepository; // Create (post request) User user = new User("john", "[email protected]"); userRepository.save(user); // Read (get request) List<User> users = userRepository.findAll(); // Update (patch (update specific fields) /put (replace entire resource with data) request) user.setUsername("john_doe"); userRepository.save(user); // Delete userRepository.delete(user);
Обе платформы позволяют разработчикам сосредоточиться на логике приложения, а не на тонкостях управления SQL и базой данных.