标签: mysql-connector-python

尝试使用mysql python连接器执行准备好的语句时出现NotImplementedError

我想使用准备好的语句使用python将数据插入MySQL DB(版本5.7),但是我一直收到NotImplementedError。我在这里关注文档:https : //dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html

使用python-2.7和mysql-connector-python库的8.0.11版本:

pip show mysql-connector-python
---
Metadata-Version: 2.1
Name: mysql-connector-python
Version: 8.0.11
Summary: MySQL driver written in Python
Home-page: http://dev.mysql.com/doc/connector-python/en/index.html
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的python脚本的清理后的版本(没有特定的主机名,用户名,密码,列或表):

import mysql.connector
from mysql.connector.cursor import MySQLCursorPrepared

connection = mysql.connector.connect(user=username, password=password,
                                      host='sql_server_host',
                                      database='dbname')
print('Connected! getting cursor')
cursor = connection.cursor(cursor_class=MySQLCursorPrepared)
select = "SELECT * FROM table_name WHERE column1 = ?"
param = 'param1'
print('Executing statement')
cursor.execute(select, (param,))
rows = cursor.fetchall()
for row in rows:
    value = row.column1
print('value: '+ value)
Run Code Online (Sandbox Code Playgroud)

运行此命令时出现此错误:

Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python mysql mysql-connector-python

6
推荐指数
1
解决办法
1899
查看次数

使用MySQL 8 Server的MySQL实用程序

作为构建过程的一部分,我们使用mysqldiff实用程序(从maven调用)通过将新构建的模式副本与从基线创建的模式版本以及迁移脚本进行比较来验证数据库迁移脚本.这一切都适用于MySQL 5.7.

我们正在寻求升级到MySQL 8.0.13.数据库用户已配置为使用mysql_native_password.当我们运行构建时,我们会收到以下错误mysqldiff:

ERROR: Authentication plugin 'caching_sha2_password' is not supported
Run Code Online (Sandbox Code Playgroud)

我们知道这个错误是由于该实用程序使用旧版本的mysql-python-connector.我们也理解答案可能就像升级连接器版本一样简单,但我们不知道如何尝试.

可以在https://github.com/mysql/mysql-utilities找到MySQL Utilities .

在Windows 10上,我们使用Oracle Windows安装程序进行安装.在Amazon Linux上,我们使用yum进行安装.

注意:

  1. MySQL Utilities似乎基于嵌入式python2.7安装(我们没有在任何开发或构建机器上安装独立的python).
  2. 我们没有python的专业知识,如果我们使用嵌入式python的东西,那么详细的步骤将会有所帮助.
  3. 我们需要在Windows 10和Amazon Linux上解决这个问题.

我们如何解决这个错误,以便我们可以在Windows 10和Amazon Linux上使用mysqldiff和MySQL 8.0.13服务器?

如果答案只是升级连接器,那么执行此操作的详细步骤是什么?

我们可以进行服务器安装/配置更改以支持连接旧驱动程序的客户端吗?

python mysql mysql-connector-python mysql-8.0

6
推荐指数
1
解决办法
434
查看次数

使用%s的Python MySQL Connector数据库查询失败

我有一个基本程序,应该查询包含用户信息的数据库.我正在尝试为特定用户选择信息并将其打印到控制台.

这是我的代码:

import mysql.connector

funcon = mysql.connector.connect(user='root', password='pass', host='127.0.0.1', database='fundata')
funcursor = funcon.cursor()

query = ("SELECT * FROM funtable WHERE userName=%s")
uName = 'user1'

funcursor.execute(query, uName)

for (userName) in funcursor:
    print("{}".format(userName))
Run Code Online (Sandbox Code Playgroud)

我将用户名存储在变量中,因为稍后我计划从tkinter输入框中获取用户名.当我执行此代码时,我收到以下错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1
Run Code Online (Sandbox Code Playgroud)

我已经尝试将%s放在查询中的引号中,但随后它逐字地搜索用户名'%s'并且不返回任何内容.如何更改我的代码,以便只查询该用户的数据库?

谢谢.

仅供参考:我使用的是python 3.3.

python mysql-connector python-db-api mysql-connector-python

5
推荐指数
1
解决办法
4372
查看次数

结束 mysql-connector-python 中的连接池

我有一个使用 mysql-connector-python 创建的连接池:

dbconfig = {
        "database": db,
        "user":     "user"
}    
cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = appname,
                                  pool_size = 5,
                                  **dbconfig)
Run Code Online (Sandbox Code Playgroud)

mysql-connector API中,似乎没有结束连接池的方法。有没有办法结束连接池?

python mysql mysql-connector-python

5
推荐指数
1
解决办法
4648
查看次数

MySQL 连接器/Python 作为 Django 引擎?

即使经过数小时的谷歌搜索和搜索堆栈溢出,也无法找到答案。我向您保证,我已经看到了所有可能被视为相关的答案,但没有一个解决了我面临的问题。无需再费周折 -

目前在 shell 中我可以这样做:

Python 2.7.11+ (default, Apr 17 2016, 14:00:29)
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information. 
>>> from distutils.sysconfig import get_python_lib
>>> print get_python_lib()
/usr/lib/python2.7/dist-packages
>>> import mysql.connector
>>> db = mysql.connector.connect(user='root', password='test123', host='127.0.0.1', database='mydb')
>>> db
<mysql.connector.connection.MySQLConnection object at 0x7fd3a80536d0>
Run Code Online (Sandbox Code Playgroud)

验证我是否安装了此模块。但是,当我尝试转到settings.py文件以将DATABASE ENGINE设置为

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': 'mydb',
        'USER': 'root',
        'PASSWORD': 'test123',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}
Run Code Online (Sandbox Code Playgroud)

并尝试启动我的服务器,我不断收到错误消息:

django.core.exceptions.ImproperlyConfigured: 'mysql.connector.django'
isn't …
Run Code Online (Sandbox Code Playgroud)

python mysql django mysql-connector-python

5
推荐指数
1
解决办法
5265
查看次数

Python mysql.connector InternalError:关闭游标时发现未读结果

我想从游标中读取部分结果,然后在不读取所有结果的情况下关闭它。cursor.close()raisesInternalError: Unread result found.是否可以在不遍历所有结果或使用缓冲区选项的情况下关闭游标?

更新:

我的查询获得大约 3000 条记录,我的目标是获得符合某些条件的前几条记录。在迭代部分结果后,我得到了我想要的。然后我想放弃未读的结果。我不使用缓冲区选项,据我所知,它会立即读取所有结果。这个问题不是Python MySQL 连接器的重复- 使用 fetchone 时发现未读结果

def chooseInstrumentsFromOrigin(self, time):
    sql = """select symbol, name, total_ratio, outstanding_ratio from market_values
            where time = %s order by {captype} asc""".format(captype=self.strategy_data['captype'])

    args = [time]

    conn = mysql.connector.connect(**mysql_config)
    cursor = conn.cursor(dictionary=True)
    cursor.execute(sql, args)

    # This function will return half way.
    symbols = self.chooseInstrumentsFromLeaders(time, cursor)

    # I don't want this line!
    for i in cursor: pass

    cursor.close()
    conn.close()

    return symbols
Run Code Online (Sandbox Code Playgroud)

python mysql mysql-connector-python

5
推荐指数
1
解决办法
2万
查看次数

Python MySQL查询超时,MySQL工作台可以正常工作

我最近将网站移到了新服务器。我在MySQL数据库中有一些具有访问数据的基本python脚本。在旧服务器上,我们没有问题。在新服务器上:

  • MySQLWorkbench可以毫无问题地连接并执行所有查询
  • 使用python的相同(SELECT)查询有5%的时间工作,其余95%的时间在查询期间超时或连接丢失
  • 例如,该表有100000行,那么在MySQLWorkbench中选择整个对象就可以了。3秒后返回。
  • 在python中,相同的查询永远不会起作用,当LIMIT 2999可以查询但只有LIMIT 3010会使它超时。
  • 在本地或远程运行脚本时观察到的效果相同

已经研究了几天,以找出数据库,数据库服务器,服务器本身中是否存在阻止python(但不是MySQLWorkbench)正确执行其工作的服务器中的某些设置。

查询和代码,以防它们有趣:

query = "SELECT * FROM wordpress.table;"

conn = MySQLConnection(**mysqlconfig)
cursor = conn.cursor()
cursor.execute(query)
rows = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

我在服务器上没有详细信息,但它具有足够的功能使MySQLWorkbench正常工作,只是python似乎无法正常工作

**** 编辑 ****

为了查看此问题是否是由于查询返回的数据过多而无法处理的,我想到了使用OFFSET和LIMIT遍历更大的查询(每个查询说10行)的问题。

total_rows = 100000
interval = 10
data = []

for n in range(0, total_rows / interval):
    q = "SELECT * FROM wordpress.table LIMIT %s OFFSET %s" % (interval, n * interval)
    cursor.execute(q)
    returned = cursor.fetchall()
    rows = [[i for i in j] for j in list(returned)]

    for row in …
Run Code Online (Sandbox Code Playgroud)

python mysql mysql-workbench mysql-connector-python

5
推荐指数
1
解决办法
544
查看次数

迭代 MySQL 连接器游标时 Python 速度很慢

我有以下运行速度非常慢的代码(迭代 57,390 行需要 6.5 秒):

import mysql.connector

cnx=mysql.connector.connect(host=***, ***)
cursorSQL = cnx.cursor()

for dt in date_vect:
        cursorSQL.execute(query2, ((dt[0] + '-00:00:00'), (dt[0] + '-23:59:59'))) 
          #Takes about 0.25sec per iteration
        usr_list = list(cursorSQL.fetchall())  
          #takes about 6.20sec per iteration
Run Code Online (Sandbox Code Playgroud)

正如这里推荐的:Stackoverflow:Python 在...时很慢,我试过:

  • usr_list= cursorSQL.fetchall()
  • usr_list= list(cursorSQL.fetchall())

正如@postoronnim 所建议的,我也尝试过:

  • usr_list= cursorSQL.fetchmany(57390)

没有成功。

然而,有一些缓存效果,因为在第二次运行时相同的迭代只需要 0.5 秒,然后又减慢到 6.5 秒。

  1. 任何想法可能来自哪里?
  2. 你能确认它与我的数据库无关吗,因为所有从MySQL的导入都是在线完成的cursor.executefetchall()缓慢只是由于列表处理?
  3. 你能解释一下为什么会有缓存效应吗?

谢谢。

规格:Python 3.5 | 8核i7 | 16go 公羊

python mysql cursor fetchall mysql-connector-python

5
推荐指数
0
解决办法
1431
查看次数

设置和验证 Python MySQL 连接中使用的 SSL/TLS 版本

  • 如何告诉 Python MySQL 连接器使用哪个 SSL/TLS 协议?特定的(例如 TLS1.2)或最低的。

  • 如何检查已建立的连接使用了哪种协议?

我有一个使用mysql-connector-python(8.0.18)的应用程序。我连接这样的东西:

cnx = mysql.connector.connect(user='x', password='y', host='localhost', database='xyz')
Run Code Online (Sandbox Code Playgroud)

通常这不会给我带来麻烦,但最近在网络托管提供商服务器上它停止工作。我现在得到的错误是:

mysql.connector.errors.InterfaceError: 2026 (HY000): SSL connection error: error:1408F10B:SSL routines:ssl3_get_record:wrong version number
Run Code Online (Sandbox Code Playgroud)

并且(通过 Flask-SQLAlchemy 设置连接):

_mysql_connector.MySQLInterfaceError: SSL connection error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Run Code Online (Sandbox Code Playgroud)

我可以确认的是,如果我改为这样做ssl_disabled=True,如下所示,它可以正确连接(但我假设没有 SSL/TLS):

cnx = mysql.connector.connect(user='x', password='y', host='localhost', database='xyz', ssl_disabled=True)
Run Code Online (Sandbox Code Playgroud)

我无法更改提供者服务器,但他们说如果我指定要使用的特定版本,例如 TLS1.2,那么它应该可以正确连接。他们还提到使用ssl.OP_NO_SSLv3flag,但是这是 SSLContext 设置的一部分,我不确定如何应用于我的连接。

我看到在他们的 MySQL 实例(我无法编辑)上他们没有设置值:

  • SHOW VARIABLES LIKE 'tls_version'
  • SHOW STATUS LIKE 'Ssl_cipher'
  • SHOW STATUS LIKE 'Ssl_version'

python mysql ssl mysql-connector-python

5
推荐指数
1
解决办法
4376
查看次数

创建或编辑模型实例时 Django admin 404 错误

我目前正在调试 Django 站点的一个奇怪问题,其中一个特定模型在创建新实例或在管理界面中编辑现有实例时触发 404 错误。

具体来说,提交表单时会发生错误。我可以GET改变形式就好了。

这仅发生在实时站点上并且仅在保存此模型时发生。所有其他模型都按预期运行,当我在本地运行它时,一切都按预期运行。当以编程方式创建时,一切都很好,无论是现场还是本地。

这是我的模型:

class Content(models.Model):
    """Base Content class."""
    title = models.CharField(max_length=200)
    body = RichTextUploadingField(max_length=30000, blank=True, null=True, config_name='admin')
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(to=User, on_delete=models.CASCADE)
    slug = models.SlugField(max_length=100, null=True, default=None)

    class Meta:
        abstract = True


class ContentPage(Content):
    """Represents a page of generic text content."""
    title = models.CharField(max_length=200, unique=True)
    has_url = models.BooleanField(default=False, help_text='Sets the page to accessible via a URL.')
    banner = models.ImageField(upload_to='myfiles/banners/', blank=True, null=True)

    def save(self, *args, **kwargs):
        """Create the slug …
Run Code Online (Sandbox Code Playgroud)

python django mysql-connector-python

5
推荐指数
1
解决办法
380
查看次数