Python与数据库


Mysql

使用

  • 安装mysql-connect的包

代码如下:

import mysql.connector

config={'host':'','port':3306,'user':"",'password':'','database':''}
try:
    con=mysql.connector.connect(**config)
	cursor=con.cursor()
	cursor.execute(sql)或cursor.executemany()反复执行一条sql语句
	cursor.fetchone()或cursor.fetchall()
except Exception as e:
    print(e)
finally:
    if "con" in dir():
        con.close()

事务控制

Connector提供了简单的事务控制函数

con.start_transaction([事务隔离级别])
#事务的提交需要手动提交,不会自动触发
con.commit()
con.rollback()

数据库连接池

import mysql.connector.pooling
config={....}
pool=mysql.connector.pooling.MySQLConnetcionPool(**config,pool_size=10)
con=pool.get_connection()

性能优化

当大量数据需要插入时,可以使用executemany()方法。其效果可以有效的优化自己每次使用execute()方法所带来的性能损耗,尤其是当数据库中有10万条以上的数据后。

Tip

SQL注入

由于SQL是解释型语言,存在SQL注入问题。

此时可以利用SQL预编译机制抵御注入攻击。

SQL预编译机制:数据库提前将SQL语句编译成二进制,避免了词法分析,这样反复执行同一条SQL效率提升。

SQL语句编译的过程中,关键字已经被解析过了,所以向编译后的SQL语句传入参数,都被当作字符串处理,数据库不会解析其中注入的SQL语句。

使用方式如下:

sql="select * from user where username=%s and password=%s"
cursor.execute(sql,(username,password))#此时两个数作为参数传入已经编译好了的sql语句中

文章作者: 不二
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 不二 !
  目录