Python勉強_12

Python_12_20200404


变更履历

日期版本内容作者备注
2020/04/04v1.00初版做成author–白蜡烛–

数据库

Oracle,Mysql,Sqlserver,DB2,access
CRUD-增删改查
基础知识:略

连接数据库

pip insatll cx_oracle
注意:python和Oracle必须安装同一位的(32x,64x)
否则会导致其中一个无法运行,记得先启ora服务
CMD:sqlplus 查看Oracle服务是否正常启动

import cx_Oracle
conn = cx_Oracle.connect('user/password@localhost:1521/orcl')
增,删,改,查
####增
curs=conn.cursor()
sql1="insert into book values('11','围城','36.0','钱钟书','book_image/0011.jpg','10')"
rr=curs.execute(sql1)
conn.commit()
######删
rr=curs.execute('delete from book')
####改
sql3="update book set PRICE='36.0' where BID='11'"
rr=curs.execute(sql3)
conn.commit()
####查
sql4='SELECT * FROM book'
rr=curs.execute(sql4)
row=curs.fetchall()#fetchone()
####批量插入
data=[
    ('12','围城','36.0','钱钟书','book_image/0011.jpg','10'),
	('13','围城','36.0','钱钟书','book_image/0011.jpg','10'),
	('14','围城','36.0','钱钟书','book_image/0011.jpg','10'),
    ('15','围城','36.0','钱钟书','book_image/0011.jpg','10')]
curs.executemany("insert into book values(:1,:2,:3,:4,:5,:6)",data)
conn.commit()

有一个问题:如何防SQL注入

ORM

对象映射关系程序,隐藏数据库访问细节,而不用SQL文
pip install SQLAlchemy

创建表结构,增,删,改,查
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
engine = create_engine(
        "oracle+cx_oracle://user:password @localhost/orcl",
        max_overflow=0,  # 超过连接池大小外最多创建的连接
        pool_size=5,  # 连接池大小
        pool_timeout=10,  # 池中没有线程最多等待的时间,否则报错
        pool_recycle=15,  # 多久之后对线程池中的线程进行一次连接的回收(重置)
        max_identifier_length=30,
        echo=True
    )
Session_class =sessionmaker(bind=engine)
session=Session_class()
class Users(Base):
    __tablename__ = 'users'  # 数据库表名称
    id = Column(String(32), primary_key=True)  # id 主键
    name = Column(String(32),  nullable=False)  # name列,索引,不可为空
def create_db():
    Base.metadata.create_all(engine)
def drop_db():
	Base.metadata.drop_all(engine)
def insert_db():
     s1=Users(id="001",name="zhangsan")
     s2=Users(id="002",name="zhangsan")
     s3=Users(id="003",name="zhangsan")
     s4=Users(id="004",name="zhangsan")
     session.add_all([s1,s2,s3,s4])
     session.commit()
def select_db():
    #data=session.query(Users).get(2)#查询第二件
    #data=session.query(Users).filter(Users.id=="001").first() #条件查询
    data=session.query(Users)#全查询
    for item in data:
        print(item.id,item.name)
def change_db():
    data=session.query(Users).get(2)
    data.name="lisi3333"
    session.add(data)
    session.commit()
def delete_db():
    data = session.query(Users).get(4)
    if data:
        session.delete(data)
        session.commit()
if __name__ == '__main__':
    #drop_db()
    #create_db()
    #insert_db()
    #select_db()
    change_db()
    #delete_db()

有一个问题:数据库锁表时,程序等待锁死?上面的参数无法使其断开连接,会一直阻塞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值