python从入门到精通3——高级

一.Python MySQL

安装 mysql-connector:

python -m pip install mysql-connector

 

  • close():关闭数据库连接,在关闭之后再使用数据库连接将引发异常。
  • commit():提交数据库事务。
  • rollback():回滚数据库事务。
  • cursor():获得Cursor游标对象。 
import mysql.connector
from mysql.connector import connect

my_db = connect(
     # 数据库主机地址
    host='localhost',
     # 数据库用户名
    user='root',
     # 数据库密码
    passwd='yourpassword',
    # 固定插件
    auth_plugin='mysql_native_password'
)
print(my_db)
#<mysql.connector.connection.MySQLConnection object at 0x0000014E918348E0>

 

1.创建数据表 

import mysql.connector
from mysql.connector import connect

my_db = connect(
     # 数据库主机地址
    host='localhost',
     # 数据库用户名
    user='root',
     # 数据库密码
    passwd='yourpassword',
    # 固定插件
    auth_plugin='mysql_native_password'
)
# 获取游标
mycursor = my_db.cursor()
# 创建数据库
mycursor.execute('CREATE DATABASE run_db')
# 查询数据库
mycursor.execute('SHOW DATABASES')
for i in  mycursor:

    print(i)

# 使用数据库
mycursor.execute(" USE run_db")
# 创建数据表
mycursor.execute('CREATE TABLE sites (name VARCHAR(255),url VARCHAR(255))')
# 查询数据表
mycursor.execute('SHOW TABLES')
for n in mycursor:
    print(n)

 2.插入数据

import mysql.connector
from mysql.connector import connect
my_db = connect(
      # 数据库主机地址
    host='localhost',
     # 数据库用户名
    user='root',
     # 数据库密码
    passwd='yourpassword',
    # 固定插件
    auth_plugin='mysql_native_password'
)
mycursor = my_db.cursor()
mycursor.execute('USE demo')
mycursor.execute('CREATE TABLE sites (name VARCHAR(255),url VARCHAR(255))')

# 插入数据
sql = 'INSERT INTO sites (name,url) VALUE (%s,%s)'
val = ('南栀北夏网站','jinghan.site')
mycursor.execute(sql,val)
# 在执行插入、更新或删除等修改数据库的操作后,必须调用 commit() 方法才能确保更改被保存到数据库中。
my_db.commit()
# mycursor.rowcount 返回最后一次执行 SQL 语句后受影响的行数
print(mycursor.rowcount,'记录插入成功')

 

 批量插入

import mysql.connector
from mysql.connector import connect
my_db = connect(
      # 数据库主机地址
    host='localhost',
     # 数据库用户名
    user='root',
     # 数据库密码
    passwd='yourpassword',
    # 固定插件
    auth_plugin='mysql_native_password'
)
mycursor = my_db.cursor()
mycursor.execute('USE demo')

# 插入数据
sql = 'INSERT INTO sites (name,url) VALUE (%s,%s)'
val = [
    ('南栀北夏网站','jinghan.site'),
    ('百度','baidu.com'),
    ('github','https://www.github.com')
    ]
# executemany() 方法,并传递了 SQL 插入语句和要插入的多个值的列表
mycursor.executemany(sql,val)
# 在执行插入、更新或删除等修改数据库的操作后,必须调用 commit() 方法才能确保更改被保存到数据库中。
my_db.commit()
# mycursor.rowcount 返回最后一次执行 SQL 语句后受影响的行数
print(mycursor.rowcount,'记录插入成功')

 3.查询数据


import mysql.connector
from mysql.connector import connect
my_db = connect(
      # 数据库主机地址
    host='localhost',
     # 数据库用户名
    user='root',
     # 数据库密码
    passwd='yourpassword',
    # 固定插件
    auth_plugin='mysql_native_password'
)
mycursor = my_db.cursor()
# 选择数据库
mycursor.execute('USE demo')
# 查询数据库
mycursor.execute('SELECT name,url FROM sites')
# mycursor.fetchall() 方法是执行查询操作后获取所有结果的方法
myresult = mycursor.fetchall()
for i in myresult:
    print(i)

 myresult = mycursor.fetchone():读取一条数据,可以使用 fetchone() 方法

4. 删除记录


import mysql.connector
from mysql.connector import connect
my_db = connect(
      # 数据库主机地址
    host='localhost',
     # 数据库用户名
    user='root',
     # 数据库密码
    passwd='yourpassword',
    # 固定插件
    auth_plugin='mysql_native_password'
)
mycursor = my_db.cursor()
# 选择数据库
mycursor.execute('USE demo')
# 删除数据
sql = "DELETE FROM sites WHERE name = '百度'"
#;另外一种方法:
#sql = "DELETE FROM sites WHERE name = %s"
#na = ("stackoverflow", )
#mycursor.execute(sql, na)
mycursor.execute(sql)
my_db.commit()
print(mycursor._rowcount,'条记录删除')


 5.更新表数据


import mysql.connector
from mysql.connector import connect
my_db = connect(
      # 数据库主机地址
    host='localhost',
     # 数据库用户名
    user='root',
     # 数据库密码
    passwd='yourpassword',
    # 固定插件
    auth_plugin='mysql_native_password'
)
mycursor = my_db.cursor()
# 选择数据库
mycursor.execute('USE demo')
# 更新表数据
sql = "UPDATE sites SET name = 'zh' WHERE name = '南栀北夏网站'"
mycursor.execute(sql)
my_db.commit()
print(mycursor.rowcount,'条记录修改')


二.PyMySQL 驱动 

安装最新版的 PyMySQL

 pip3 install PyMySQL

1.创建数据库表

import pymysql
# 打开数据库连接
db = pymysql.connect(
    host='localhost',
    user='root',
    password='yourpassword',
    # 数据库名称
    database='demo'
)
# 创建一个游标对象
cusor = db.cursor()
# 创建数据库表
sql = """
    CREATE TABLE EMPLOTEE(
    name CHAR(20) NOT NULL,
    age INT,
    sex CHAR(1),
    INCOME FLOAT
    )
"""
cusor.execute(sql)
db.close()

 2.插入数据

import pymysql
# 打开数据库连接
db = pymysql.connect(
    host='localhost',
    user='root',
    password='yourpassword',
    # 数据库名称
    database='demo'
)
# 创建一个游标对象
cusor = db.cursor()
# sql插入数据
sql = "INSERT INTO EMPLOTEE(name,age,sex,INCOME) VALUES ('tom',18,'男',2000)"
try:
    # 执行sql语句
    cusor.execute(sql)
    # 提交到数据库执行
    db.commit()
except Exception as e:
    print('发生错误',e)

    # 发生错误时回滚
    db.rollback()

# 关闭数据库
db.close()





 3.查询数据

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall(): 接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
import pymysql

# 打开数据库连接
db = pymysql.connect(
    host='localhost',
    user='root',
    password='yourpassword',
    database='demo'
)

# 创建一个游标对象
cursor = db.cursor()

# SQL 查询数据
sql = "SELECT * FROM EMPLOTEE WHERE INCOME > %s" % (1000)

try:
    db.commit()
    cursor.execute(sql)
    result = cursor.fetchall()
    for row in result:
        name = row[0]
        age = row[1]
        sex = row[2]
        income = row[3]
        print("name=%s, age=%s, sex=%s, income=%s" % (name, age, sex, income))
except Exception as e:
    print('代码异常:', str(e))

# 关闭游标和数据库连接
cursor.close()
db.close()

4.更新数据 

import pymysql

# 打开数据库连接
db = pymysql.connect(
    host='localhost',
    user='root',
    password='yourpassword',
    database='demo'
)

# 创建一个游标对象
cursor = db.cursor()

# sql更新数据
sql = "UPDATE EMPLOTEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('男')
try:
    # 执行sql
    cursor.execute(sql)
    db.commit()
except Exception as e:
    print('代码异常',e)
    db.rollback()

db.close()

 5.删除数据

import pymysql

# 打开数据库连接
db = pymysql.connect(
    host='localhost',
    user='root',
    password='yourpassword',
    database='demo'
)

# 创建一个游标对象
cursor = db.cursor()

# sql删除数据
sql = "DELETE FROM EMPLOTEE WHERE AGE < 20"
try:
    cursor.execute(sql)
    db.commit()
except Exception as e:
    print(e)
    db.rollback()

db.close()
 

三. Python 多线程

多线程类似于同时执行多个不同程序,多线程运行有如下优点:

  • 使用线程可以把占据长时间的程序中的任务放到后台去处理。
  • 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
  • 程序的运行速度可能加快。
  • 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

Python中使用线程有两种方式:函数或者用类来包装线程对象。

函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程。语法如下:

_thread.start_new_thread ( function, args[, kwargs] )
  • function - 线程函数。
  • args - 传递给线程函数的参数,他必须是个tuple类型。
  • kwargs - 可选参数

 线程模块——threading

  • threading.currentThread(): 返回当前的线程变量。
  • threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  • threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
  • run(): 用以表示线程活动的方法。
  • start():启动线程活动。

  • join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
  • isAlive(): 返回线程是否活动的。
  • getName(): 返回线程名。
  • setName(): 设置线程名。
import threading
import time 
exitFlag = 0
class myThread(threading.Thread):
    def __init__(self,threadID,name,delay):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.delay = delay

    def run(self):
        print("开始线程:" + self.name)
        print_time(self.name,self.delay,5)
        print('退出线程:' + self.name)

def print_time(threadName,delay,counter):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print ("%s: %s" % (threadName, time.ctime(time.time())))
        counter -= 1

# 创建新线程
thread1 = myThread(1,'Thread-1',1)
thread2 = myThread(2,'Thread-2',2)

# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print('退出主线程')

猜你喜欢

转载自blog.csdn.net/m0_74421072/article/details/135323207