python中可以使用两种方法实现更新数据库脚本的示例


本文摘自php中文网,作者黄舟,侵删。

最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新。

第一种:使用python的MySQLdb模块利用原生的sql语句进行更新

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

import MySQLdb

#主机名

HOST = '127.0.0.1'

#用户名

USER = "root"

#密码

PASSWD = "123456"

#数据库名

DB = "db_name"

# 打开数据库连接

db=MySQLdb.connect(HOST,USER,PASSWD,DB)

# 获取操作游标

cursor=db.cursor()

 

if __name__ == '__main__':

 

    if cursor:

        command_a = "update tables_one set status=5 where status=0"

        # 使用execute方法执行SQL语句

        cursor.execute(command_a)

        # 提交到数据库执行

        db.commit()

 

        command2 = "select field from tables_one where id =12"

        ret2 = cursor.execute(command2)

        # 获取所有记录列表

        ret2=cursor.fetchall()

        for item in ret2:

                command3 = "insert into tables_two(name) values (%s);" % (item[0])

                fin=cursor.execute(command3)

                db.commit()

        # 关闭数据库连接

        db.close()

数据库查询三种方式

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象

  • fetchall():接收全部的返回结果行.

  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

第二种:使用python的框架flask和sqlalchemy进行更新

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

# -*- coding:utf-8 -*-

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

from sqlalchemy.sql import text

 

HOST = '127.0.0.1'

USER = "root"

PASSWD = "123456"

DB = "carrier_test"

CHARTSET = "utf8"

 

app = Flask(__name__,instance_relative_config = True)

#链接数据库路径

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%s@127.0.0.1:3306/%s?charset=%s' %(USER,PASSWD,DB,CHARTSET)

#如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

#如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。

app.config['SQLALCHEMY_ECHO'] = False

# 数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。

app.config['SQLALCHEMY_POOL_SIZE'] = 6

db = SQLAlchemy(app)

 

class Table_one(db.Model):

    __tablename__ = 'table_one'

 

    id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)

    com_name = db.Column('com_name', db.String(30), nullable=False)

    com_about = db.Column('com_about', db.String(200), nullable=False)

 

    def __repr__(self):

        return '<table_one com_name %r>' % self.com_name

 

 

class Table_two(db.Model):

    __tablename__ = 'table_two'

 

    id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)

    reason = db.Column('reason', db.String(128), nullable=True)

    create_time = db.Column('create_time', db.TIMESTAMP, server_default=text('now()'))

    status = db.Column('status', db.Integer, nullable=False, default=0)

 

    def __repr__(self):

        return '<table_two id %r>' % self.id

 

def db_commit_all(lists):

    try:

        db.session.add_all(lists)

        db.session.commit()

        return 'SUCCESS'

    except Exception,e:

        return 'Fail!!!'

 

def commits_to_three_judge():

    com_sta_obj = Table_one.query.filter_by(com_name='只是测试使用,不用关心表间关系').all()

    for ite in com_sta_obj:

        ship_obj = Table_two.query.filter_by(id=ite.id).first()

        if ship_obj:

            if int(ship_obj.status) == 2:

                ite.status = 0

                print db_commit_all([ite])

    print '表同步结束'

 

64

if __name__=='__main__':

    #执行更新数据库函数

    commits_to_three_judge()

两种方式对比:

1.在实际项目中,数据库的更新 需要用到很多相关函数进行数据的收集,判断是否满足条件等,而这些相关函数在项目中都是用 Sqlalchemy进行数据相关操作,比如第二种方法里的db_commit_all()函数

2.使用第二种方法,直接复制这些函数到脚本中即可,如果使用第一种方法,则需要重写相关函数,增加开发时间,浪费精力。

3.如果项目中是使用flask进行开发,推荐使用第二种方法进行数据库更新。

以上就是python中可以使用两种方法实现更新数据库脚本的示例的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

浅析Python打包工具distutils、setuptools

Python怎么求最大公约数和最小公倍数

Python错误、异常和程序调试的方法介绍(附代码)

Python怎么取余数

爬虫基本流程request和response的介绍

Python实现求解最大公约数的方法

Python 通过logging写入日志到文件和控制台的实例

Python学习路线

Python什么时候用类方法

Python中all()函数和any()函数的便捷用法

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...