手记

MySQL与Python的交互学习笔记

MySQL Connector

官方的驱动模块,兼容性好

创建连接

1、import mysql.connector

    con=mysql.connector.connect(

    host="localhost",port="3306",

    user = 'root',password="abc1",

    database="demo");

2、import mysql.connector

    config={

    "host":"localhost",

    "port":3306,

    "user" :'root',

    "password":"abc1",

    "database":"demo"};

con=mysql.connector.connect(**config)

利用游标来执行SQL语句,而查询的结果集也保存在游标中

cursor=con.cursor()

cursor.execute(sql语句)

SQL语句是解释型语言,拼接SQL语句的时候,容易被注入恶意的SQL语句。

SQL预编译机制

预编译就是将数据库提前把SQL语句编译成二进制,反复执行童一条SQL语句的效率就会提高。

SQL语句被编译后,传入参数都被当做字符串处理,数据库不会解释注入SQL语句。

防注入

sql="SELECT COUNT(*) FROM t_user WHERE username=%s AND AES_DECRYPT(UNHEX(password),‘helloword’)=%s";

cursor.execute(sql,(username,password));

print(cursor.fetchone()[0])

事务控制

con.start_transaction([事务的隔离级别])

con.commit()

con.rollback()

异常处理

try:

    ......

except Exception as e:

    ..[con.rollback()]

finally:

    if "con" in dir():con.close()

数据库最昂贵的是数据库连接,并发尤为突出

TCP连接需要三次握手,四次回首,然后数据库还要验证用户信息。

数据库连接池:预先创建一些数据库连接,然后缓存,避免程序语言反复创建

import mysql.connector.pooling

config={...}

pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=10)

con=pool.get_connection()

EXECUTEMANY()函数可以反复执行一条SQL语句。

cursor.executemany(sql,data)

create table t_emp_new AS (select * from t_emp)复制数据表

create table t_emp_new like t_emp 复制数据表结构(内容空)

cursor.fetchall() 查出全部数据




0人推荐
随时随地看视频
慕课网APP