首先实现增加数据的功能
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
HOSTNAME = '127.0.0.1'
DATABASE = 'student'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}'
.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
# 继承这个函数生成的基类
Base = declarative_base(engine)
# ORM操作数据库
class Test(Base):
# 定义表的名字
__tablename__ = 'test'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50), nullable=False)
# 模型映射到数据库中
Base.metadata.create_all()
article1 = Test(name='hangshao')
article2 = Test(name='handsome')
# 保存到数据库中
# 类的实例化 __call__ 将类变成方法去调用
Session = sessionmaker(bind=engine)
session = Session()
# 添加
session.add(article1)
session.add(article2)
# session.add_all([article1, article1])
# 提交
session.commit()
print(article1.name)
print(article1.id)
print(article2.name)
print(article2.id)
然后将增删改查封装进四个方法里
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
HOSTNAME = '127.0.0.1'
DATABASE = 'student'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}'
.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
# 继承这个函数生成的基类
Base = declarative_base(engine)
# ORM操作数据库
class Test(Base):
# 定义表的名字
__tablename__ = 'article'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50), nullable=False)
content = Column(String(50))
author = Column(String(50))
def __str__(self):
return "[title:{}],[content:{}],[author:{}]"
.format(self.title, self.content, self.author)
# 模型映射到数据库中
Base.metadata.create_all()
# 保存到数据库中
# 类的实例化 __call__ 将类变成方法去调用
Session = sessionmaker(bind=engine)
session = Session()
def add_data():
article = Test(title='Python', content='人生苦短,我用Python',
author='coder')
session.add(article)
# session.add_all([article1, article1])
session.commit()
def search_data():
# 查询所有数据 all()
data = session.query(Test).all()
for item in data:
print(item)
# 条件查询 filter()
# data = session.query(Test).filter(Test.title=='Python').all()
# for item in data:
# print(item)
# 查询第一条 first()
# data = session.query(Article).first()
# print(data)
# 查询第n条 get(n)
data = session.query(Test).get(1)
print(data)
def update_data():
# 查询出要修改的这条记录
article = session.query(Test).first()
article.author = 'hangshao'
print(article.author)
session.commit()
# 回滚
# session.rollback()
def delete_data():
# 查询出要修改的这条记录
article = session.query(Test).first()
session.delete(article)
session.commit()
# 以防误删除操作:
# is_delete 1 未删除 0 删除
# 删除 == is_delete 1=>0
if __name__ == '__main__':
add_data()
# search_data()
# update_data()
# delete_data()
字段的数据类型和约束
类型:
Integer:整形
Float:浮点类型
Boolean:传递True/False进去
DECIMAL:定点类型
enum:枚举类型
Date:传递datetime.date()进去 日期 年月日
DateTime:传递datetime.datetime()进去 年月日 时分秒
Time:传递datetime.time()进去 时分秒
String:字符类型,使用时需要指定长度,区别于Text类型
Text:文本类型
LONGTEXT:长文本类型 文章的内容
约束:
default:默认值
nullable:是否可空 nullable = False 不允许为空
primary_key:是否为主键
unique:是否唯一 存放的内容 是唯一的!!!
autoincrement:是否自动增长
onupdate:更新的时候执行的函数 这条记录做更新的时候 会执行的
name:该属性在数据库中的字段映射