V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
slgz
V2EX  ›  程序员

Python 连接 mysql 数据的问题请教

  •  
  •   slgz · 2018-01-18 13:43:42 +08:00 · 2170 次点击
    这是一个创建于 2500 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一个问题很奇怪的问题 我安装好了 mysql.connector 之后,在 cmd 下执行和单独一个文件执行,都没有报错。

    但是在 flask 框架下,import mysql.connector 就会报错 ImportError: No module named mysql.connector。 代码和报错如下。

    求各位大佬解。。研究两天了。。

    ===============================华丽分割线=================================

    第二个问题,就是,我在原生的上面操作。 通过,cursor.rowcount 返回产生或影响的行数。来判断是 1。但是,实际上在数据库中并没有更新到。

    >>> cursor.execute('update user set name = "1111" WHERE id="1" ')
    >>> print cursor.rowcount
    1
    >>>
    
    21 条回复    2018-01-19 17:09:11 +08:00
    lfzyx
        1
    lfzyx  
       2018-01-18 13:55:20 +08:00   ❤️ 1
    flask 下请用 Flask-SQLAlchemy
    syrupofplum
        2
    syrupofplum  
       2018-01-18 13:55:42 +08:00
    flask 环境用了 virtualenv 吧,看看是不是那个环境没装 mysql
    update 没生效是不是没提交事务
    slgz
        3
    slgz  
    OP
       2018-01-18 13:58:11 +08:00
    @lfzyx 所以,意思是,在 flask 框架下是没办法用远程 sql 操作的吗
    slgz
        4
    slgz  
    OP
       2018-01-18 13:59:10 +08:00
    @syrupofplum 用了 virtualenv 。 但是,我在 virtualenv 环境下,去执行 hello.py 。也会报错。 update 的时候,就没开启事物呀,为啥还要提交。。
    alvie
        5
    alvie  
       2018-01-18 14:03:05 +08:00
    @slgz MySQL 连接会有个配置叫做 autocommit,如果 autocommit 设置为 False 不管用不用事务提交变更都需要执行 commit
    ilovebaicai
        6
    ilovebaicai  
       2018-01-18 14:03:11 +08:00
    使用 MySQLdb,db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )试试,
    或者使用 Flask-SQLAlchemy,app.config['SQLALCHEMY_DATABASE_URI']=mysql://username:password@hostname/database
    haoji
        7
    haoji  
       2018-01-18 14:05:01 +08:00
    from flask_sqlalchemy import SQLAlchemy
    slgz
        8
    slgz  
    OP
       2018-01-18 14:07:15 +08:00
    @alvie 好像,并没有做这个配置。。排除这个问题。。
    slgz
        9
    slgz  
    OP
       2018-01-18 14:08:41 +08:00
    @ilovebaicai 我单独写了一个文件用 Flask-SQLAlchemy,app.config['SQLALCHEMY_DATABASE_URI']=mysql://username:password@hostname/database 这个是可以了。ye~
    slgz
        10
    slgz  
    OP
       2018-01-18 14:10:28 +08:00
    @haoji 对对对,就是这个问题。好像在 flask 下,必须,引用 flask_sqlalchemy import SQLAlchemy 才行。。 我刚刚用 from flask.ext.sqlalchemy import SQLAlchemy 提示我 deprecated
    likuku
        11
    likuku  
       2018-01-18 14:19:39 +08:00
    import 模块都找不到,还是先解决这个吧。
    lfzyx
        12
    lfzyx  
       2018-01-18 14:22:55 +08:00
    @slgz 意思是不要做复杂的事情,轮子已经有了
    slgz
        13
    slgz  
    OP
       2018-01-18 14:45:00 +08:00
    又有一个新问题, 单独的 model 文件执行没问题,就是,在 hello.py 中 form models import * 的时候就报错了~~
    <img src="http://ishwy.me/wp-content/uploads/2018/01/[email protected]">
    @likuku
    @syrupofplum
    @lfzyx
    likuku
        14
    likuku  
       2018-01-18 15:02:36 +08:00
    @slgz

    你在这个位置,python 交互模式下,直接 import mysql 模块呢?

    SQLAlchemy 就先不要管了。


    最近也在折腾 Flask-SQLAlchemy 的确很烦,我是严格按 "Flask 之旅" 里的范例来作的,没这么多毛病:
    https://www.gitbook.com/book/wizardforcel/explore-flask/
    slgz
        15
    slgz  
    OP
       2018-01-18 15:05:26 +08:00
    @likuku 直接 import mysql 模块 是没问题的。
    likuku
        16
    likuku  
       2018-01-18 15:06:18 +08:00
    你当前的 venv 环境下,pip list 看看有没有装好 mysql.connector
    zhd173
        17
    zhd173  
       2018-01-19 09:45:10 +08:00
    第一个问题,用 pycharm 的终端 pip list 看有没有 mysql.connector 的包,或者进 preferences-project interpreter 看有没有对应的包;
    zhd173
        18
    zhd173  
       2018-01-19 09:45:48 +08:00
    第二个问题就是你的 cursor 没有 commit
    slgz
        19
    slgz  
    OP
       2018-01-19 15:02:30 +08:00
    @likuku 明白了。原来是在 virtualenv 环境下,不行。。 我看 flask 教程,一直以为要在 virtualenv 环境下,才能运行 flask。。 文档没看仔细!
    slgz
        20
    slgz  
    OP
       2018-01-19 15:03:08 +08:00
    @zhd173 在 正常 python 环境下是有的。 但是,我是用 virtualenv 环境启动的,所有没有。
    likuku
        21
    likuku  
       2018-01-19 17:09:11 +08:00
    @slgz 你在 virtualenv 再装 mysql 连接器就行了。虚拟环境就当是一个类似 docker 的 平行宇宙 /本地虚拟机。

    推荐看这一部分:
    环境 | Flask 之旅 : https://spacewander.github.io/explore-flask-zh/3-environment.html

    所有安装测试开发都在 virtualenv 下就行了,最好是每个项目都有独立的 virtualenv,
    干净,又可以轻易管理其依赖,也便于发布。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3015 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:48 · PVG 18:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.