概述
- 上节知识点回顾
一、ORM
思考:
在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办呢?是不是需要把所有的 SQL 语句都再重新写一遍呢?
无ORM时
有ORM时
ORM简介
ORM
全称Object Relation Mapping
对象关系映射
通过ORM
可以不用关心后台是使用的哪种数据库,只需要按照ORM
所提供的语法规则去书写相应的代码,ORM
就会自动的转换成对应数据库的SQL
语句
二、SQLAlchemy连接数据库
2.1 第一步:安装
1、安装mysql
pip install -i https://pypi.douban.com/simple mysql
2、安装python包:pymysql、sqlalchemy
pip install -i https://pypi.douban.com/simple puymysql
pip install -i https://pypi.douban.com/simple sqlalchemy
注:使用豆瓣源https://pypi.douban.com/simple
安装可以加快安装速度
2.2 第二步:导入模块
from sqlalchemy import create_engine
2.3 第三步:数据库数据
HOSTNAME = '127.0.0.1'
#Linux的本机地址
POST = '3306'
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
2.4 第四步:数据连接URL
db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
USERNAME,
PASSWORD,
HOSTNAME,
POST,
DATABASE
)
#与url类似
2.5 第五步:连接数据库
engine = create_engine(db_url)
2.6 第六步:测试连接
if __name__ == '__main__':
connection = engine.connect()
result = connection.execute('select 1')
print(result.fetchone())
- 连接成功显示结果:
2.7 connect.py完整代码
from sqlalchemy import create_engine
HOSTNAME = '127.0.0.1'
#Linux的本机地址
POST = '3306'
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
USERNAME,
PASSWORD,
HOSTNAME,
POST,
DATABASE
)
#与url类似
engine = create_engine(db_url)
if __name__ == '__main__':
connection = engine.connect()
result = connection.execute('select 1')
print(result.fetchone())
三、Module(在数据库里面新建表)
思考:刚才已经使用 SQLAlchemy 连上数据库,现在该如何在数据库里面新建表呢?
3.1 第一步:创建Module的Base类
- 在
connect.py
文件中:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自 sqlalchemy 中的基类。
使用 declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。
应用通常只需要有一个 Base 的实例。我们通过 declarative_base() 功能创建一个基类。
3.2 第二步:创建Module
- 新建
user_module.py
文件:
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime
from connect import Base
class User(Base):
#将表映射成一个类;实际上是在建一个表
__tablename__ = 'user'
#类属性
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(20), nullable=False)
password = Column(String(50))
creatime = Column(DateTime, default=datetime.now)
- 注:我们用类来表示数据库里面的表!!!这些表的类都继承于我们的Base基类。在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段
3.1 第三步:创建Module
Base.metadata.create_all()
执行此代码,就会把创建好的 Module 映射到数据库中
- 完整的
user_module.py
代码:
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime
from connect import Base
class User(Base):
#将表映射成一个类;实际上是在建一个表
__tablename__ = 'user'
#类属性
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(20), nullable=False)
password = Column(String(50))
creatime = Column(DateTime, default=datetime.now)
if __name__ == '__main__':
Base.metadata.create_all()
- 运行
user_module.py
前数据库存在的表:
- 运行
user_module.py
后数据库存在的表:
Mysql知识回顾:
- 进入mysql
mysql -u root -p
- 查看数据库
show databases;
- 创建数据库
create database mydb;
- 刷新
flush privileges;
- 给数据库用户赋权限
grant all on *.* to 'admin'@'%';
在pycharm中添加查看数据库的快捷方式的方法如下:
1、选择MySQL
2、下载驱动
3、3306端口转发
4、pycharm成功显示Database
四、增删改查
from connect import session
from user_module import User
def add_user():
#插入单条数据
person = User(username='chimu1', password='aaaa')
session.add(person)
# 插入多条数据
session.add_all(
[
User(username='chimu2', password='bbbb'),
User(username='chimu3', password='cccc')
]
)
# 插提交给数据库,不要忘记!!!
session.commit()
def search_user():
# 查询全部
result = session.query(User).all()
print('全部数据如下:')
print(result)
# 查询第一条
result1 = session.query(User).first()
print('第一条数据如下:')
print(result1)
def update_user():
aa = session.query(User).filter(User.username == 'chimu2' ).update({ User.password:12345678 })
session.commit()
def delete_user():
user = session.query(User).filter(User.username=='chimu1')[0]
session.delete(user)
session.commit()
if __name__ == '__main__':
search_user()
插入数据前
插入数据后
删除用户
更新用户
最后
以上就是故意酒窝为你收集整理的第四节:ORM的全部内容,希望文章能够帮你解决第四节:ORM所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复