找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4742|回复: 7

[求助] python使用pymysql对数据库执行.sql文件

1

主题

3

帖子

3

积分

贫民

积分
3
skingwang 发表于 2019-3-15 13:52:27 | 显示全部楼层 |阅读模式
求助:
使用python对数据库做一些初始化数据(Mysql)的操作,主要是执行指定路径的A.sql文件
A.sql文件中包含几类脚本
1、建表脚本
2、插入数据
3、创建函数
CREATE FUNCTION aaaaa RETURNS varchar(50)
BEGIN
        RETURN (
                CASE
                WHEN xxx>= 0.75 THEN
                        'A'
                WHEN xxxx>= 0.5 THEN
                        'B'
                ELSE
                        'D'
                END
        );
END;

4、存储过程

秋大神指点一下, 怎么实现比较好?尤其是当脚本中有函数时,我提取.sql文件,然后按照分号分割所有的sql内容,逐条执行时,就会报错。
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2019-3-15 14:13:50 | 显示全部楼层
把模拟测试文件,以及要做的操作发上来。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
skingwang  楼主| 发表于 2019-3-15 14:36:23 | 显示全部楼层
sheeboard 发表于 2019-3-15 14:13
把模拟测试文件,以及要做的操作发上来。

使用python 对数据库执行这个文件

PS:是以文件的方式来执行,而不是把里面的SQL写死在代码里面。

test.sql

2.04 KB, 下载次数: 1

执行的SQL片段

回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2019-3-15 14:53:10 | 显示全部楼层
本帖最后由 sheeboard 于 2019-3-15 14:55 编辑

PRIMARY KEY (`nianji`,`xueke`,`banben`,`zhunkaohao`,`tihao`)这里有问题,主键是唯一的。而且里面没数据。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
skingwang  楼主| 发表于 2019-3-15 15:06:17 | 显示全部楼层
本帖最后由 skingwang 于 2019-3-15 15:07 编辑
sheeboard 发表于 2019-3-15 14:53
PRIMARY KEY (`nianji`,`xueke`,`banben`,`zhunkaohao`,`tihao`)这里有问题,主键是唯一的。而且里面没数据 ...

抱歉,大佬,请参考这个附件,之前附件我删除部分信息导致执行有问题。

这个脚本主要是建库之后,初始化数据库的,主要是建表以及函数


test.sql

2.1 KB, 下载次数: 4

修订后

回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2019-3-17 09:30:33 | 显示全部楼层
本帖最后由 sheeboard 于 2019-3-17 10:38 编辑

参考,用sqlalchemy操作pymysql引擎

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine,Column,String,Integer
engine=create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8')
Base=declarative_base()

class exam(Base):
    __tablename__="exam"
    id=Column(Integer,primary_key=True)
    quyu=Column(String(50))
    nianji=Column(String(50))
    xueke=Column(String(50))
    banben=Column(String(50))
    xuexiao=Column(String(50))
    fenshu=Column(Integer)
    def __init__(self,*args,**kwargs):
        super(exam,self).__init__(*args,**kwargs)
    def __repr__(self):
        return self.xuexiao

Base.metadata.tables["exam"].create(bind = engine)
这个只是建表,

插入数据用sessionmaker,
from sqlalchemy.orm import sessionmaker
Session=sessionmaker(bind=engine)

quyu="*"
nianji="*"
xueke="*"
banben="*"
xuexiao="*"
fenshu=230
data=exam(quyu=quyu,nianji=nianji,xueke=xueke,banben=banben,xuexiao=xuexiao,fenshu=fenshu)

session=Session()

session.add(data)
        try:
            session.commit()
        except:
            pass
    session.close()

上面的是插入一条的





Screenshot from 2019-03-17 10-37-41.png
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2019-3-17 10:02:39 | 显示全部楼层
如果是新手的话可以用navicat来操作建库结构,然后备份结构或数据生成代码文件,用mysql命令重定向来恢复数据库和数据,不是海量数据的话还是可以用用的。
然后是操作,我推荐用pandas,其实上面那些代码操作都可以不用,pandas用dataframe read_数据源和to_sql就可以实现,当然空库还是要建的,查询函数也要比mysql的简单。你给的东西有些小问题,也没测试数据,我也是随便写写的。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
xbwx2019 发表于 2019-5-11 10:13:47 | 显示全部楼层
不错,这个过程程序值得学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表