不懂Python ORM操作MySQL和SQLite?别怕,跟我学吧!

2023年 8月 10日 104.0k 0

数据库基础概念

数据库是一种用于存储和管理数据的软件系统,它可以存储和管理结构化数据、半结构化数据和非结构化数据等。数据库中的数据通常以表格的形式组织,每个表格包含多个列和多个行。表格中的列定义了数据的类型和属性,行表示实际的数据记录。

SQL(Structured Query Language)是一种用于访问和管理数据库的标准语言,它支持数据的查询、插入、更新和删除等操作。SQL语言可以分为数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和数据查询语言(DQL)等。

在Python中,我们可以使用各种库和框架来操作和管理数据库,例如使用MySQL、SQLite等关系型数据库,使用MongoDB等非关系型数据库,使用SQLAlchemy等ORM框架。

MySQL

MySQL是一种流行的关系型数据库管理系统,它支持多种操作系统和编程语言,并且具有高性能、可靠性和扩展性等优点。

在Python中,我们可以使用mysql-connector-python或pymysql等库来连接和操作MySQL数据库。

安装MySQL

在使用MySQL之前,我们需要先安装和配置MySQL。

在Linux系统中,可以使用以下命令来安装MySQL:

sudo apt-get install mysql-server

在Windows系统中,可以从MySQL官网下载安装程序进行安装。

安装完成后,我们需要创建一个MySQL用户,并为该用户授权访问数据库。可以使用以下命令来创建用户和授权:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';

在上面的命令中,'username'和'password'分别表示要创建的MySQL用户的用户名和密码。

连接MySQL

在Python中,可以使用mysql-connector-python或pymysql等库来连接MySQL数据库。

以下是一个使用mysql-connector-python连接MySQL数据库的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password"
)

print(mydb)

在上面的示例中,我们创建了一个名为mydb的MySQL连接,并打印了该连接对象。

创建数据库和表格

在MySQL中,可以使用CREATE DATABASE语句来创建数据库,使用CREATE TABLE语句来创建表格。

以下是一个使用mysql-connector-python创建数据库和表格的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password"
)

mycursor = mydb.cursor()

mycursor.execute("CREATE DATABASE mydatabase")

mycursor.execute("USE mydatabase")

mycursor.execute("CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")

在上面的示例中,我们首先创建了一个名为mydatabase的数据库,然后使用USE语句选择该数据库。接着,我们创建了一个名为customers的表格,其中包含三个列:id、name和address。

插入数据

在MySQL中,可以使用INSERT INTO语句向表格中插入数据。

以下是一个使用mysql-connector-python向表格中插入数据的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")

mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "record inserted.")

在上面的示例中,我们向customers表格中插入了一条记录,其中包含name和address两个列的值。

查询数据

在MySQL中,可以使用SELECT语句查询表格中的数据。

以下是一个使用mysql-connector-python查询数据的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers")

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

在上面的示例中,我们使用SELECT语句查询customers表格中的所有数据,并使用fetchall方法获取查询结果。最后,我们使用for循环遍历查询结果并打印。

更新数据

在MySQL中,可以使用UPDATE语句更新表格中的数据。

以下是一个使用mysql-connector-python更新数据的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "UPDATE customers SET address = 'Canyon 123' WHERE name = 'John'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "record(s) affected")

在上面的示例中,我们使用UPDATE语句将customers表格中name为John的记录的address列更新为Canyon 123。

删除数据

在MySQL中,可以使用DELETE语句删除表格中的数据。

以下是一个使用mysql-connector-python删除数据的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE name = 'John'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "record(s) deleted")

在上面的示例中,我们使用DELETE语句删除customers表格中name为John的记录。

SQLite

SQLite是一种轻量级的关系型数据库管理系统,它不需要独立的服务器进程或系统,数据存储在本地文件中,适合于嵌入式设备和小型应用程序等场景。

在Python中,我们可以使用sqlite3库来连接和操作SQLite数据库。

连接SQLite

以下是一个使用sqlite3连接SQLite数据库的示例:

import sqlite3

conn = sqlite3.connect('example.db')

在上面的示例中,我们创建了一个名为example.db的SQLite连接。

创建表格

在SQLite中,可以使用CREATE TABLE语句创建表格。

以下是一个使用sqlite3创建表格的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute('''CREATE TABLE stocks
             (date text, trans text, symbol text, qty real, price real)''')

在上面的示例中,我们创建了一个名为stocks的表格,其中包含五个列:date、trans、symbol、qty和price。

插入数据

在SQLite中,可以使用INSERT INTO语句向表格中插入数据。

以下是一个使用sqlite3向表格中插入数据的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

conn.commit()

在上面的示例中,我们向stocks表格中插入了一条记录,其中包含五个列的值。

查询数据

在SQLite中,可以使用SELECT语句查询表格中的数据。

以下是一个使用sqlite3查询数据的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

for row in c.execute('SELECT * FROM stocks ORDER BY price'):
    print(row)

在上面的示例中,我们使用SELECT语句查询stocks表格中的所有数据,并按price列进行排序。最后,我们使用for循环遍历查询结果并打印。

更新数据

在SQLite中,可以使用UPDATE语句更新表格中的数据。

以下是一个使用sqlite3更新数据的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute("UPDATE stocks SET qty = 200 WHERE symbol = 'RHAT'")

conn.commit()

print("Number of rows updated: ", conn.total_changes)

在上面的示例中,我们使用UPDATE语句将stocks表格中symbol为RHAT的记录的qty列更新为200。

删除数据

在SQLite中,可以使用DELETE语句删除表格中的数据。

以下是一个使用sqlite3删除数据的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute("DELETE FROM stocks WHERE symbol = 'RHAT'")

conn.commit()

print("Number of rows deleted: ", conn.total_changes)

在上面的示例中,我们使用DELETE语句删除stocks表格中symbol为RHAT的记录。

ORM框架

ORM(Object-Relational Mapping)框架是一种将对象模型和关系模型进行映射的技术,它可以将数据库中的表格映射为Python中的类,将表格中的列映射为类的属性,从而使得我们可以使用面向对象的方式来操作数据库。

在Python中,SQLAlchemy是一个流行的ORM框架,它支持多种关系型数据库,包括MySQL、SQLite、PostgreSQL等。

安装SQLAlchemy

在使用SQLAlchemy之前,我们需要先安装SQLAlchemy。

可以使用以下命令来安装SQLAlchemy:

pip install sqlalchemy

连接数据库

在SQLAlchemy中,可以使用create_engine函数创建一个数据库连接对象。

以下是一个使用SQLAlchemy连接MySQL数据库的示例:

from sqlalchemy import create_engine

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")

在上面的示例中,我们创建了一个名为engine的MySQL连接对象。

以下是一个使用SQLAlchemy连接SQLite数据库的示例:

from sqlalchemy import create_engine

engine = create_engine("sqlite:///example.db")

在上面的示例中,我们创建了一个名为engine的SQLite连接对象。

定义数据模型

在SQLAlchemy中,可以使用declarative_base函数定义一个基本的数据模型类,从而建立数据库中表格和Python中类的映射关系。

以下是一个使用SQLAlchemy定义数据模型的示例:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class Customer(Base):
    __tablename__ = 'customers'

    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    address = Column(String(255))

在上面的示例中,我们定义了一个名为Customer的数据模型类,表示数据库中的customers表格。该类继承自Base类,其中包含三个属性:id、name和address。

创建表格

在SQLAlchemy中,可以使用Base类的metadata属性和create_all方法来创建表格。

以下是一个使用SQLAlchemy创建表格的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Base, Customer

Base.metadata.create_all(engine)

在上面的示例中,我们使用Base.metadata属性和create_all方法创建了数据库中的表格。其中,engine对象表示了连接到数据库的引擎,Base类表示了数据模型类的基类,Customer类表示了要创建的数据模型类。

插入数据

在SQLAlchemy中,可以使用Session类和add方法向表格中插入数据。

以下是一个使用SQLAlchemy向表格中插入数据的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customer1 = Customer(name='John', address='Highway 21')
customer2 = Customer(name='Bob', address='Main Street')

session.add(customer1)
session.add(customer2)

session.commit()

session.close()

在上面的示例中,我们使用Session类创建了一个名为session的会话对象,然后创建了两个名为customer1和customer2的Customer对象,并使用add方法将它们添加到会话对象中。最后,我们使用commit方法提交会话,并关闭会话对象。

查询数据

在SQLAlchemy中,可以使用Session类和query方法查询表格中的数据。

以下是一个使用SQLAlchemy查询数据的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customers = session.query(Customer).all()

for customer in customers:
    print(customer.name, customer.address)

session.close()

在上面的示例中,我们使用Session类创建了一个名为session的会话对象,然后使用query方法查询了customers表格中的所有数据,并使用all方法获取查询结果。最后,我们使用for循环遍历查询结果并打印。注意,在使用SQLAlchemy查询数据时,我们并没有直接使用SQL语句,而是使用了Python的面向对象方式。

更新数据

在SQLAlchemy中,可以使用Session类和commit方法更新表格中的数据。

以下是一个使用SQLAlchemy更新数据的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customer = session.query(Customer).filter_by(name='John').first()

customer.address = 'Highway 22'

session.commit()

session.close()

在上面的示例中,我们使用Session类创建了一个名为session的会话对象,然后使用query方法查询了customers表格中name为John的数据,并使用first方法获取查询结果的第一个元素。接着,我们将该元素的address属性更新为'Highway 22',最后使用commit方法提交更新,并关闭会话对象。

删除数据

在SQLAlchemy中,可以使用Session类和commit方法删除表格中的数据。

以下是一个使用SQLAlchemy删除数据的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customer = session.query(Customer).filter_by(name='John').first()

session.delete(customer)

session.commit()

session.close()

在上面的示例中,我们使用Session类创建了一个名为session的会话对象,然后使用query方法查询了customers表格中name为John的数据,并使用first方法获取查询结果的第一个元素。接着,我们使用delete方法删除该元素,并使用commit方法提交删除,并关闭会话对象。

总之,SQLAlchemy是一个强大的ORM框架,它提供了丰富的功能,可以大大简化Python和关系型数据库之间的交互。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论