Python mysql 数据库操作

Python操作数据库的方式相对来说比较简单,在这里简单总结一下常用的方式。

1.首先看最“原始”的方式,下面这段代码来自与w3cschool,更多增删改查的例子请点击这里:

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    # Rollback in case there is any error
    db.rollback()
finally:
    # 关闭数据库连接
    db.close()

但是这种方式每次都要关闭数据库的连接,而且有SQL注入的风险。



2.    使用with as方式,这样可以保证数据库的连接会在程序结束后自动关闭。

    with MySQLdb.connect(host=hostAdr, user=userName, passwd=password,db=database) as conn:
        query = 'select column_name from information_schema.columns where table_name="%s"' % tableName
        conn.execute(query)
        
        results = conn.fetchall()  
    return results

这里的conn就是一个游标(cursor),但是这里面怎么使用rollback()操作我还不知道,希望知道的能回复我,谢了哈。但是这种方式也不能避免SQL注入的风险。


3.使用alchemy,这种方式应该是比较高大上的,也避免了SQL注入

mysql_db = create_engine('sqlite:///:memory:', pool_recycle=1900, pool_size=16, max_overflow=16,echo_pool=True) 
metadata = schema.MetaData(mysql_db)
my_table = schema.Table('table', metadata, autoload=True)

with mysql_db.connect() as connection:
    trans = connection.begin()
    try:
        create_time_string=datetime.datetime.now().strftime("%H:%M,%Y-%m-%d")

        ins = my_table.insert().values(user_id='one_of_list',tenant_id='hehe')
        
        connection.execute(ins)
                
        trans.commit()
    except:
        trans.rollback()
        raise        



你可能感兴趣的:(数据库,mysql,数据库操作)