数据库基础概念
数据库是一种用于存储和管理数据的软件系统,它可以存储和管理结构化数据、半结构化数据和非结构化数据等。数据库中的数据通常以表格的形式组织,每个表格包含多个列和多个行。表格中的列定义了数据的类型和属性,行表示实际的数据记录。
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和关系型数据库之间的交互。