赞
踩
通过python操作数据库的方式可以是SQLAlchemy,
具体代码如下:
from sqlalchemy import create_engine # 创造一个引擎 与mysql相连接 # 连接数据库 # 主机地址 HOSTNAME = '127.0.0.1' # 数据库名称 DATABASE = 'flask_demo' # 端口 PORT = 3306 # 用户名和密码 USERNAME = 'root' PASSWORD = 'root' DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE) # 固定格式 engine = create_engine(DB_URL) with engine.connect() as conn: result = conn.execute('select * from first_table') #print(result.fetchone()) print(result.fetchall())
其中的sql代码是写在: result = conn.execute('select * from first_table')
,其中的select * from first_table就是sql语句。
不过如果不使用ORM的话,需要直接使用sql的语句进行操作,这样操作的缺点:
1.SQL语句的重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多 相近似的SQL语句,
2.很多SQL语句是在业务逻辑中拼出来的,如果有数据库需要修改,就需要修改这些逻辑,很容易漏掉其中的某些SQL语句的修改
3.写SQL时容易忽略web安全问题
于是,可以通过ORM的方式进行sql语句的操作:
通过类的方式操作数据库,而不用写原生的SQL语句,通过把表映射成类,把行作为实例,把字段作为属性,ORM在执行对象操作的时候,最终还是会把对应的操作转换成原生语句执行。(多了一步转换)
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String HOSTNAME = '127.0.0.1' DATABASE = 'class_database' PORT = 3306 USERNAME = 'root' PASSWORD = 'root' DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE) engine = create_engine(DB_URL) Base = declarative_base(engine) # 类代表表格 # 行代表字段 class Students(Base): __tablename__ = 'students' id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(50),nullable=False) gender = Column(Integer,default=1,comment='1为男,2为女') # 这个是加批注吗? # 性别 修饰通过1和2 # 模型映射到数据库之中 Base.metadata.create_all()
添加数据:
from sqlalchemy.orm import sessionmaker class Article(Base): __tablename__ = 'article' id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(50),nullable=False) gender = Column(Integer,default=1,comment='1为男,2为女') # 添加数据 article = Article(name='chemey') Session = sessionmaker(bind=engine) # bind 监听 session = Session() # 这样可以调用类中的 __call__方法 session.add(article) # 提交 session.commit() # 添加和提交缺一不可 加油 print(article.name) print(article.gender) print(article.id)
完整代码:
#! C:\Python\Python36 # -*- coding: utf-8 -*- # @Time : 2020/10/30 12:05 # @Author : liuchengyong # @File : flask-orm-data.py # @Software: PyCharm #! C:\Python\Python36 # -*- coding: utf-8 -*- # @Time : 2020/10/30 10:43 # @Author : liuchengyong # @File : SQLAllchemy_orm.py # @Software: PyCharm 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 = 'class_database' PORT = 3306 USERNAME = 'root' PASSWORD = 'root' DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE) engine = create_engine(DB_URL) Base = declarative_base(engine) class Article(Base): __tablename__ = 'article' id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(50),nullable=False) gender = Column(Integer,default=1,comment='1为男,2为女') # 这个是加批注吗? # 性别 修饰通过1和2 # 添加数据 # 模型映射到数据库之中 # Base.metadata.create_all() # 添加数据 article = Article(name='chemey') Session = sessionmaker(bind=engine) # bind 监听 session = Session() # 这样可以调用类中的 __call__方法 session.add(article) # 提交 session.commit() # 添加和提交缺一不可 加油 print(article.name) print(article.gender) print(article.id)
代码更新:
#! C:\Python\Python36 # -*- coding: utf-8 -*- # @Time : 2020/10/30 12:05 # @Author : liuchengyong # @File : flask-orm-data.py # @Software: PyCharm #! C:\Python\Python36 # -*- coding: utf-8 -*- # @Time : 2020/10/30 10:43 # @Author : liuchengyong # @File : SQLAllchemy_orm.py # @Software: PyCharm 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 = 'class_database' PORT = 3306 USERNAME = 'root' PASSWORD = 'root' DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE) engine = create_engine(DB_URL) Base = declarative_base() class Article(Base): __tablename__ = 'article' id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(50),nullable=False) gender = Column(Integer,default=1,comment='1为男,2为女') # 这个是加批注吗? # 性别 修饰通过1和2 # 添加数据 # 模型映射到数据库之中 Base.metadata.create_all(engine) # 添加数据 article = Article(name='chemey') Session = sessionmaker(bind=engine) # bind 监听 session = Session() # 这样可以调用类中的 __call__方法 session.add(article) # 提交 session.commit() # 添加和提交缺一不可 加油 print(article.name) print(article.gender) print(article.id)
最新写法,之前的写法中存在问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。