我想使用准备好的语句使用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) 作为构建过程的一部分,我们使用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进行安装.
注意:
我们如何解决这个错误,以便我们可以在Windows 10和Amazon Linux上使用mysqldiff和MySQL 8.0.13服务器?
如果答案只是升级连接器,那么执行此操作的详细步骤是什么?
我们可以进行服务器安装/配置更改以支持连接旧驱动程序的客户端吗?
我有一个基本程序,应该查询包含用户信息的数据库.我正在尝试为特定用户选择信息并将其打印到控制台.
这是我的代码:
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.
我有一个使用 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中,似乎没有结束连接池的方法。有没有办法结束连接池?
即使经过数小时的谷歌搜索和搜索堆栈溢出,也无法找到答案。我向您保证,我已经看到了所有可能被视为相关的答案,但没有一个解决了我面临的问题。无需再费周折 -
目前在 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) 我想从游标中读取部分结果,然后在不读取所有结果的情况下关闭它。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) 我最近将网站移到了新服务器。我在MySQL数据库中有一些具有访问数据的基本python脚本。在旧服务器上,我们没有问题。在新服务器上:
已经研究了几天,以找出数据库,数据库服务器,服务器本身中是否存在阻止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) 我有以下运行速度非常慢的代码(迭代 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 秒。
cursor.execute,fetchall()缓慢只是由于列表处理?谢谢。
规格:Python 3.5 | 8核i7 | 16go 公羊
如何告诉 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'我目前正在调试 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)