标签: pymysql

如何使用PyMySQL获取MySQL类型的错误?

我正在使用MySQL和PyMySQL进行Python应用程序,我希望能够在得到MySQL错误时知道它的数量,以便我可以根据它做一些不同的事情.

有没有办法用try-except语句或其他方式来做到这一点?

python mysql pymysql

10
推荐指数
3
解决办法
3万
查看次数

PyMySQL和OrderedDict

我一直在使用PyMySQL一段时间,并创建了我自己的包装器,我习惯于简写编写查询.尽管如此,我一直在使用OrderedDict创建CSV文件,因为我需要保持顺序相同但我意识到如果我使用PyMySQL来查询数据库,我将无法得到数据库回馈的顺序.如果我只想转储东西而不是手写订单,这对于检查CSV文件有点烦人.

我的问题是,如何将PyMySQL与OrderedDict一起使用?目前我的代码如下:

import pymysql
conn = pymysql.connect(host='localhost', user='root', passwd='', db='test')
cursor = conn.cursor(pymysql.cursors.DictCursor)
Run Code Online (Sandbox Code Playgroud)

所以每当我查询时,我都会收到一本字典:

cursor.execute("""SELECT * FROM test""")
for row in cursor:
    pp(row)  # gives me dictionary
Run Code Online (Sandbox Code Playgroud)

我想要的是,当我浏览游标时,我实际上是按照它们从数据库中进入的顺序检索列的OrderedDict.

就像是:

cursor = conn.cursor(pymysql.cursors.OrderedDict)
Run Code Online (Sandbox Code Playgroud)

python python-2.7 pymysql

10
推荐指数
1
解决办法
1490
查看次数

PyMySQL显然返回旧/快照值/不重新运行查询?

我正在使用pymysql.cursors和一个简化的代码示例,从表中加载一行并每秒打印它是:

#!/usr/bin/env python3
import pymysql.cursors
import time

conn = pymysql.connect(host='localhost',
     # credentials etc.
     cursorclass=pymysql.cursors.DictCursor)

while True:
    with conn.cursor() as cursor:
        cursor.execute("SELECT * FROM state limit 1;")
        vals = cursor.fetchone()
        print (vals)
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

state是MariaDb数据库中具有单行的表.

现在,当这个运行时,如果我启动一个MySQL客户端并更改表的内容,这个脚本可以快速地输出原始值; 即它显然没有咨询数据库(!).

我对Python很新,我绝对是PyMySQL的新手,所以如果这是一个愚蠢的问题,那么我会有一些问题,但我有点RTM,它看起来很奇怪.

python mysql pymysql

10
推荐指数
1
解决办法
1523
查看次数

如何从views.py文件向django数据库插入数据?

如何从视图中的函数py文件向我的django数据库插入数据?是python manage.py shell唯一的插入方式吗?

有关我正在使用的更多解释:

  • python 3.4
  • django 1.8.2
  • PyMySQL

例如:

models.py:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    city = models.CharField(max_length=60)
Run Code Online (Sandbox Code Playgroud)

views.py:

from django.http import HttpResponse
import pymysql
from books.models import Publisher

def send(request):
    p = Publisher(name='Apress', city='Berkeley')
    p.save()
Run Code Online (Sandbox Code Playgroud)

urls.py

来自niloofar.views import send

url(r'^ index /',发送),

我想在加载页面索引时,send函数工作并将数据插入数据库.

这是行不通的.它没有给出任何错误,当我刷新索引页面时没有任何反应,没有任何内容被发送到数据库.我认为在我尝试插入数据的方式上存在语法错误.

让我注意到即使我跑的python manage.py shell话:

来自books.models import Publisher

p =出版商(name ='Apress',city ='Berkeley')

p.save()

什么都不会插入django数据库.

python django django-models django-views pymysql

10
推荐指数
4
解决办法
5万
查看次数

pymysql.err.InterfaceError: (0, '') 在对 sql 表进行大量推送时出错

我在短时间内从使用许多不同线程的 python 代码(使用 pymysql)对 mysql 表进行了大量插入。

每个线程,其中有很多,最终可能会或可能不会将数据推送到 MySql 表。

这是导致问题的代码块(可以为每个正在运行的线程调用):

        sql = ("INSERT INTO LOCATIONS (location_id, place_name) VALUES (%s, %s)")
        cursor = self.connection.cursor()          
        cursor.execute(sql, (location_id, place_name))     
        cursor.close()
Run Code Online (Sandbox Code Playgroud)

特别是这一行:

cursor.execute(sql, (location_id, place_name))
Run Code Online (Sandbox Code Playgroud)

这会导致此错误:

pymysql.err.InterfaceError: (0, '')
Run Code Online (Sandbox Code Playgroud)

另请注意,我在上述块所在的类的 init 中定义了 self.connection。因此所有线程共享一个 self.connection 对象,但获得自己的游标对象。

该错误似乎是随机发生的,并且仅在对 mysql 表进行了多次插入后才开始出现(我认为)。它不一致意味着每次尝试插入 mysql 时都不会发生这种情况。

我在谷歌上搜索了这个特定的错误,似乎它可能是由于在运行查询之前关闭了游标。但我相信很明显我在执行查询后关闭了游标。

现在我认为这是因为:

  1. 对MySql表的某种写限制,虽然pymysql.err.InterfaceError的错误似乎没有具体说这个
  2. 我在高范围内定义了一个连接,该连接在线程中创建了游标,这一事实可能会以某种方式导致此问题。

想法?

python mysql multithreading pymysql

10
推荐指数
2
解决办法
7647
查看次数

SQLAlchemy ORM:“AttributeError:无法在行中找到列”

我现在正在学习 SQLAlchemy,但遇到了一个令我困惑的错误。是的,这里已经有类似的问题了,但似乎没有一个得到解决。

我的目标是使用ORM模式来查询数据库。所以我创建了一个模型:

from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import Session, registry
from sqlalchemy.sql import select

database_url = "mysql+pymysql://..."

mapper_registry = registry()
Base = mapper_registry.generate_base()


class User(Base):
    __tablename__ = "user"

    id = Column(Integer, primary_key=True)
    name = Column(String(32))


engine = create_engine(database_url, echo=True)
mapper_registry.metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)

新我想加载表中所有条目的整行:

with Session(engine) as session:
    for row in session.execute(select(User)):
        print(row.name)

#- Error: #

Traceback (most recent call last):
...
    print(row.name)
AttributeError: Could not locate column in row for column 'name'
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?我不应该能够访问 ORM 模型的字段吗?或者我误解了 ORM 的想法? …

python orm sqlalchemy mariadb pymysql

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

如何在Python3中将输入转义为MySQL数据库?

如何在Python3中将输入转义为MySQL数据库?我正在使用PyMySQL并且工作正常,但是当我尝试做类似的事情时:

cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` =  '{}'".format(request[1]))
Run Code Online (Sandbox Code Playgroud)

如果字符串有'或不起作用".我也尝试过:

cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` =  %s",request[1])
Run Code Online (Sandbox Code Playgroud)

这个问题是库(PyMySQL)使用Python2.x的格式化语法%,它不再起作用了.我也发现了这种可能的解决方案

conn.escape_string()
Run Code Online (Sandbox Code Playgroud)

这里,但我不知道在哪里添加此代码.这就是我得到的:

import pymysql
import sys
conn = pymysql.connect( host   = "localhost",
            user   = "test",
            passwd = "",
            db     = "test")
cursor = conn.cursor()
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` =  {}".format(request[1]))

result = cursor.fetchall()

cursor.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)

编辑:我解决了!在PyMySQL中,正确的方法是这样的:

import pymysql
import sys
conn = pymysql.connect(host="localhost",
            user="test",
            passwd="",
            db="test")
cursor = conn.cursor()
text = …
Run Code Online (Sandbox Code Playgroud)

mysql sql python-3.x pymysql

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

在AWS RDS上间歇性无法连接到mysql(错误2003)

我们遇到了与mysql服务器超时连接的间歇性问题.我们收到的错误如下.

(2003, 'Can\'t connect to MySQL server on \'<connection>\' ((2013, "Lost connection to MySQL server during query (error(104, \'Connection reset by peer\'))"))') Callstack: File "/usr/lib64/python2.7/site-packages/pymysql/connections.py", line 818, in _connect 2003, "Can't connect to MySQL server on %r (%s)" % (self.host, e)) File "/usr/lib64/python2.7/site-packages/pymysql/connections.py", line 626, in __init__ self._connect()

更多信息:

  • 我们有一系列EC2服务器不断向后端RDS运行查询.
  • 我们平均每秒约有500个连接到RDS
  • 我们每天每次RDS有大约0到4次打嗝
  • 打嗝与我们的维护窗口不一致
  • 当我们遇到打嗝时,它会影响很多连接~50
  • 当打嗝发生时,它将中断所有服务器和端口之间的连接

错误本身看起来是从ec2上关闭的tcp连接生成的.我们的TCP保持活动时间设置为7200秒,并且当错误被触发时.

我的问题是如何找出这些打嗝发生的原因?很棒的是,它们并不经常发生,但它们发生的并不理想.

任何建议将不胜感激!

更新10/29:

我一直在运行一个服务检查,看看我是否在sql服务器上运行了任何长进程,看起来这些错误没有达到那么远.永远不会为此连接创建新进程!我仍然收到了打嗝,没有任何关联的迹象.

mysql django amazon-web-services amazon-rds pymysql

9
推荐指数
1
解决办法
1353
查看次数

pymysql停止工作:NameError:未定义名称"byte2int"

我在Python中使用pymysql连接到数据库.它工作正常,但现在我得到了以下error:

Traceback(最近一次调用最后一次):

  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/connections.py", line 327, in __init__
    self.connect()
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/connections.py", line 598, in connect
    self._request_authentication()
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/connections.py", line 865, in _request_authentication
    data = _auth.scramble_old_password(self.password, self.salt) + b'\0'
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 72, in scramble_old_password
    hash_pass = _hash_password_323(password)
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 97, in _hash_password_323
    for c in [byte2int(x) for x in password if x not in (' ', '\t', 32, 9)]:
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 97, in <listcomp>
    for c in …
Run Code Online (Sandbox Code Playgroud)

python-3.x pymysql

9
推荐指数
2
解决办法
915
查看次数

如何使用Python连接AWS RDS MySql数据库

我目前正在尝试使用 PyMySQL 库通过 python 程序连接到在 AWS 上创建的 MySql 数据库

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql

host = 'admin.cjp8hsqu4je0.us-east-2.rds.amazonaws.com'
user = 'admin'
password = '12345678'
database = 'admin'

connection = pymysql.connect(host, user, password, database)
with connection:
    cur = connection.cursor()
    cur.execute("SELECT VERSION()")
    version = cur.fetchone()
    print("Database version: {} ".format(version[0]))

Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,出现以下错误:

Traceback (most recent call last):
  File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pymysql\connections.py", line 581, in connect
    sock = socket.create_connection(
  File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 808, in create_connection
    raise err
  File "C:\Users\SuperPC\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 796, in create_connection …
Run Code Online (Sandbox Code Playgroud)

mysql amazon-web-services amazon-rds python-3.x pymysql

9
推荐指数
2
解决办法
4万
查看次数