首页 > 数据库 >Python操作数据库

Python操作数据库

时间:2022-09-29 20:59:18浏览次数:39  
标签:engine __ cur Python 数据库 pymysql 操作 create conn

python使用MySQL主要有两个模块,pymysql(MySQLdb)和SQLAchemy。
  pymysql(MySQLdb)为原生模块,直接执行sql语句,其中pymysql模块支持python 2和python3,MySQLdb只支持python2,两者使用起来几乎一样。
  SQLAchemy为一个ORM框架,将数据对象转换成SQL,然后使用数据API执行SQL并获取执行结果
  另外DBUtils模块提供了一个数据库连接池,方便多线程场景中python操作数据库。
python中常用组件redis,rabbitmq,mongodb,ES(lasticsearch),zk。
pip install pymysql pymongo redis

pymysql学习

#关于中文问题
#1. mysql命令行创建数据库,设置编码为gbk:create databse demo2 character set utf8; 
#2. python代码中连接时设置charset="gbk"
#3. 创建表格时设置default charset=utf8
 
#连接数据库
conn = pymysql.connect(host="localhost", user="root", passwd="", db='learningsql', charset='utf8', port=3306)  #和mysql服务端设置格式一样(还可设置为gbk, gb2312)
#创建游标
cursor = conn.cursor()
#执行sql语句
cursor.execute("""create table if not exists t_sales(
                id int primary key auto_increment not null,
                 nickName varchar(128) not null,
                 color varchar(128) not null,
                  size varchar(128) not null, 
                  comment text not null,
                  saledate varchar(128) not null)engine=InnoDB default charset=utf8;""") #提交
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()

 

SQLAlchemy学习

SQLAlchemy的整体架构如下,建立在第三方的DB API上,将类和对象操作转换为数据库sql,然后利用DB API执sql语句得到结果。其适用于多种数据库。另外其内部实现了数据库连接池,方便进行多线程操作。


pip install sqlalchemy

SQLAlchmy也可以不利用ORM,使用数据库连接池,类似pymysql模块执行原生sql

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer
import threading
 
engine = create_engine(
            "mysql+pymysql://[email protected]:3306/learningsql?charset=utf8",
            max_overflow = 0,  #超过连接池大小外最多创建的连接,为0表示超过5个连接后,其他连接请求会阻塞 (默认为10)
            pool_size = 5,    #连接池大小(默认为5)
            pool_timeout = 30,  #连接线程池中,没有连接时最多等待的时间,不设置无连接时直接报错 (默认为30)
            pool_recycle = -1)  #多久之后对线程池中的线程进行一次连接的回收(重置) (默认为-1)
            
# def task():
    # conn= engine.raw_connection() #建立原生连接,和pymysql的连接一样
    # cur = conn.cursor()
    # cur.execute("select * from t_sales where id>%s",(2,))
    # result = cur.fetchone()
    # cur.close()
    # conn.close()
    # print(result)
    
# def task():
    # conn = engine.contextual_connect() #建立上下文管理器连接,自动打开和关闭
    # with conn:
        # cur = conn.execute("select * from t_sales where id>%s",(2,))
        # result = cur.fetchone()
    # print(result)
    
def task():
    cur =engine.execute("select * from t_sales where id>%s",(2,))  #engine直接执行
    result = cur.fetchone()
    cur.close()
    print(result)
 
if __name__=="__main__":
    for i in range(10):
        t = threading.Thread(target=task)
        t.start()

执行ORM语句

import datetime
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer, DateTime, Text
 
Base = declarative_base()
 
class User(Base):
    __tablename__="users"
    id = Column(Integer,primary_key=True)
    name = Column(String(32),index=True, nullable=False) #创建索引,不为空
    email = Column(String(32),unique=True)
    ctime = Column(DateTime, default = datetime.datetime.now)  #传入方法名datetime.datetime.now
    extra = Column(Text,nullable=True)  
    
    __table_args__ = {
    
        # UniqueConstraint('id', 'name', name='uix_id_name'), #设置联合唯一约束
        # Index('ix_id_name', 'name', 'email'),               # 创建索引
    }
 
def create_tbs():
    engine = create_engine("mysql+pymysql://[email protected]:3306/learningsql?charset=utf8",max_overflow=2,pool_size=5)
    Base.metadata.create_all(engine)   #创建所有定义的表
 
def drop_dbs():
    engine = create_engine("mysql+pymysql://[email protected]:3306/learningsql?charset=utf8",max_overflow=2,pool_size=5)
    Base.metadata.drop_all(engine)   #删除所有创建的表
 
if __name__=="__main__":
    create_tbs() #创建表
    #drop_dbs()   #删除表

 

 
 

标签:engine,__,cur,Python,数据库,pymysql,操作,create,conn
From: https://www.cnblogs.com/windyrainy/p/16743021.html

相关文章

  • python实现找到列表中第二大的数字
    '''给定一个长度大于3的列表,里面数字是无序的,且数字不重复,如何找到第二大的数字?例如列表a=[1,3,6,2,7,9],找到的结果就应该是:7下面给出六种解决方案'''a=[1,3,6......
  • Python基础7
    今日内容概要数据类型内置方法理论整型相关操作浮点型相关操作字符串相关操作列表相关操作可变与不可变今日内容详细数据类型内置方法理论数据类型......
  • 数据类型的内置方法与操作
    今日内容总结数据类型内置方法理论我们之前所学习的每一种数据类型本身都含有一系列的操作方法,内置方法是其中最多的(自带的功能)在python中数据类型调用内置方法的统......
  • Oracle数据库用户权限分析
    文档课题:Oracle数据库用户权限分析.1、查询权限普通用户查询自己所拥有的所有权限.>showuserUSERis"LEO">select*fromsession_privs;PRIVILEGE--------------------......
  • 数据类型内置方法与操作
    目录一.数据类型内置方法理论二.整型int的内置方法与操作1.类型转换2.进制数转换三.浮点型内置方法与操作1.类型转换2.针对布尔值的特殊情况四.字符串float的内置方法与操......
  • Python3安装psutil报错
    报错:pip3installpsutilcompilationterminated.error:command'gcc'failedwithexitstatus1解决:yuminstallpython3-devel继续安装:[root@centos......
  • 快手Python笔试题【杭州多测师】【杭州多测师_王sir】
    deftest():foriinrange(10):ifi%2!=0:print("helloworld")else:passtest()#调用函数packagecom.duoc......
  • NoSQL数据库与关系数据库的比较
    SQL,即结构化查询语言,是传统的关系型数据库的查询语言。SQL数据库能够通过简化CRUD操作,处理数据库中的结构化数据。此处的CRUD代表了创建(create)、检索(或读取,retrieve、r......
  • 学习python-Day66
    今日学习内容前后端开发模式API接口postman使用序列化和反序列化restful规范drf:第三方app>>>快速实现符合restful规范的接口视图类,都是继承APIView......
  • python如何制作并安装自建包?
    一、依赖首先检查python是否安装了wheel、setuptools包,没有则使用pip安装pipinstallwheel--force-reinstallpipinstallsetuptools--force-reinstall 二、准......