python从入门到精通3——高级
2024-01-08 05:38:15
一.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('退出主线程')
?
?
?
文章来源:https://blog.csdn.net/m0_74421072/article/details/135323207
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!