Python+pyodbc+sqlserver

1.创建Flask项目

项目结构长这样

M:model(数据模型-自己创建)T:templates(视图模板)V:views.py(视图函数)

2.创建虚拟环境

 3.编写sqlhelper.py(pip安装:pyodbc)

import pyodbc

class sqlhelper:
    '''sql帮助类'''
    def __init__(self):
        '''初始化 '''
        self.DRIVER='{ODBC Driver 17 for SQL Server}'#数据库引擎
        self.SERVER=r'127.0.0.1'#数据库地址
        self.DATABASE= 'NovelDB'#数据库名称
        self.UID = 'sa'#登录名
        self.PWD = '123456'#密码

    def GetConnect(self):  
        ''''' 连接数据库 '''  
        self.conn = pyodbc.connect('DRIVER=%s;SERVER=%s;DATABASE=%s;UID=%s;PWD=%s' % (self.DRIVER,self.SERVER,self.DATABASE,self.UID,self.PWD))
        cur = self.conn.cursor()  
        if not cur:  
            print("connected failed!")  
        else:  
            return cur  

    def ExecuteReader(self, sql):  
        ''''' 查询'''  
        cur = self.GetConnect() #连接数据库
        cur.execute(sql)#执行sql指令
        ret = cur.fetchall()#获取数据
        cur.close()#关闭游标
        self.conn.close()#关闭数据库连接
        return ret 
      
    def ExecuteNonQuery(self,sql):  
        ''''' 增删改'''  
        cur = self.GetConnect()  
        cur.execute(sql)  #执行sql指令
        self.conn.commit()#提交
        cur.close()#关闭游标
        self.conn.close() 
        
    def ExecuteScalar(self,sql):
        '''返回单个字段'''
        cur = self.GetConnect()  
        cur.execute(sql)#执行sql指令
        ret = cur.fetchone()[0]#获取一条数据的一个字段
        cur.close()#关闭游标
        self.conn.close()#关闭数据库连接
        return ret 

还有一个连接数据库的方式,DSN,不需要密码,我没试过,顺嘴说一下。

关于数据库引擎

 

4.创建menu.py(用来测试看的)

from . import sqlhelper

class menu:

    def __init__(self):
         '''初始化 '''
         self.ms = sqlhelper.sqlhelper()

    def loadlist(self):
        #获取全部数据
       return self.ms.ExecuteReader("select menuid,name from menu")

    def addmenu(self,name):
        #添加
        self.ms.ExecuteNonQuery("insert menu(name) values('{0}')".format(name))
        print('添加菜单')

5.将数据传递到前台(views.py)

from .models.menu import menu

@app.route('/test')
def test():
    """菜单管理"""
    r = menu().loadlist()
    print(r)
    return render_template('test.html',data=r,title = '菜单管理')

6.前台显示数据(创建一个test.html页面,把下面的代码丢到body里面去)

    <table class="table table-bordered">
        <tr>
            <th>菜单标识</th>
            <th>菜单</th>
            <th>操作栏</th>
        </tr>
        {% for i in data %}
        <tr>
            <td>{{ i[0] }}</td>
            <td>{{ i[1] }}</td>
            <td><input type="button" value="编辑" onclick="edit({{ i[0] }})" /></td>
        </tr>
        {% endfor %}
    </table>
    <script src="/static/scripts/jquery-1.10.2.js"></script>
    <script type="text/javascript">
        function edit(menuid) {
            alert(menuid);
        }
    </script>

跑起来就是这样的

posted @ 2021-11-18 15:21  MuZiLily  阅读(191)  评论(0编辑  收藏  举报