使用Python我一直得到一个
(1205, 'Lock wait timeout exceeded; try restarting transaction')
每当我尝试插入特定表时出错.但是,当我尝试直接从MySQL控制台插入时,它工作得很好.展望着
SHOW FULL PROCESSLIST
在数据库上显示没有其他活动查询.由于这是一个没有附加实时应用程序的开发数据库,我无法想象任何问题.但是,它是在托管我们的生产数据库的服务器上提供的,因此我强烈希望尽可能不进行重置.关于如何调试这个的任何建议?
注意 如果我使用SHOW FULL PROCESSLIST查看正在对数据库运行的查询,最终会因上述消息而失败,然后从MySQL控制台手动插入它,它会按预期工作.
编辑 以下是查询的示例:
INSERT INTO deals (user_ID, store_ID, storeChain_ID, title, dealSaving, 
dealDisclaimer, restriction, dealImage, dealURL, submit_ID, userProvider_ID, 
createDate, createDateTime, expirationDate, expirationDateTime, ZIP, STATE, 
city, businessType, DealType_ID, IP, rating, popular, dealSearchData, tag, 
submitName, provider_dealID)
VALUES (NULL,
        2651049,
        NULL,
        'Toronto East Community Arts Program',
        'Three-Week Photography Workshop',
        NULL,
        NULL,
        'https://a1.image.net/imgs/8423535b-bd3b-4e1e-afee-ab2869970a4c/700_q60.jpg',
        'https://www.exmples.com/deals/1336374',
        111,
        1,
        '2015-11-12',
        '2015-11-12 10:01:58.282826',
        '2015-11-17 09:59:59',
        '2015-11-17 23:59:00',
        'M4M 1K7',
        'ON', …我在AWS上使用AURORA MySQL.当我跑步时,show Processlist我看到很多delayed commit ok done
我想问一下这会影响性能吗?如果是的话,我该怎么做?
我正在使用PyMySQL,一个基于Python的库,我确实.commit在每个INSERTS和之后使用UPDATE
这是代码
import pymysql
pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='iDontWannaSay',
    db='iDontWannaShow',
    charset='utf8'
)
和错误Traceback是:
data is :::::b'\xff\x02\x00\xff\x81\x15'....##### I was add near line 1279 which is print("data is :::::%s...."%data[i:i+6])
Traceback (most recent call last):
  File "C:\Users\123\Desktop\pymysqldebug.py", line 8, in <module>
    charset='utf8'
  File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\__init__.py", line 90, in Connect
    return Connection(*args, **kwargs)
  File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\connections.py", line 709, in __init__
    self.connect()
  File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\connections.py", line 934, in connect
    self._get_server_information()
  File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\connections.py", line 1279, in _get_server_information
    self.server_charset = charset_by_id(lang).name
  File "D:\Program …我正在使用pymysql客户端连接到我的Flask API中的mysql,几天后一切正常(大约1-2天),然后突然开始抛出此错误
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 1039, in _write_bytes
    self._sock.sendall(data)
TimeoutError: [Errno 110] Connection timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "Main.py", line 194, in post
    result={'resultCode':100,'resultDescription':'SUCCESS','result':self.getStudentATData(studentId,args['chapterId'])}
  File "Main.py", line 176, in getStudentATData
    cur.execute("my query")
  File "/usr/local/lib/python3.4/dist-packages/pymysql/cursors.py", line 166, in execute
    result = self._query(query)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/cursors.py", line 322, in _query
    conn.query(q)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 855, in query
    self._execute_command(COMMAND.COM_QUERY, sql)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 1092, in _execute_command
    self._write_bytes(packet) …我正在尝试使用sqlalchemy连接到Windows计算机上的本地mysql数据库。它可以使用pymysql,但不能与sqlalchemy一起使用。
代码sqlalchemy:
engine = create_engine('mysql+mysqldb://root:mypass@localhost/classicmodels')
engine.connect()
给出错误:
OperationalError: (_mysql_exceptions.OperationalError) (1193, "Unknown system variable 'tx_isolation'")
使用pymysql的工作代码:
connection = pymysql.connect(host='localhost',
                             user='root',
                             password = 'mypass',
                             db = 'classicmodels')
cursor = connection.cursor()
cursor.execute('select * from customers')
mydata = cursor.fetchall()
mydata = pd.DataFrame(list(mydata))
mydata.head(5)
为了更快地进行测试,最好使用基于内存的sqlite,但仍需要偶尔使用MySQL进行测试,使其更接近于生产环境。为了避免枯燥的讨论/抽象问题,对于上面提到的两种类型的SQL数据库,下面的代码都会插入几个单词并确认它们已在数据库中。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import unittest
db = SQLAlchemy()
TEST_DATABASE_URL_MEMORY = 'sqlite:///:memory:'
TEST_DATABASE_URL_MYSQL = 'mysql+pymysql://root:@127.0.0.1:3306/somewords'
def create_app(db_url):
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = db_url
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    db.init_app(app)
    return app
class Word(db.Model):
    __tablename__ = 'words'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    word = db.Column(db.String(32), index=True)
class TestInsertion(unittest.TestCase):
    def manual_set_up(self, db_url):
        self.app = create_app(db_url)
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.drop_all()
        db.create_all()
    def insert(self):
        words = ['hello', 'world']
        for word in words:
            w = Word(word=word)
            db.session.add(w)
        db.session.commit()
        for word in …我是 python pymysql 的新手(我在 Ruby 之前使用过 Mysql2 gem),我想从 mysql 表中获取键和值并执行一些操作:
例如:
dbconnection = pymysql.connect(host=mysql_hostname, user=mysql_username, password=mysql_pass, db=mysql_schema, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
cursor = dbconnection.cursor()
_SQL = (""" 
        select * ...
        """)
cursor.execute(_SQL)
result = cursor.fetchall()
for row in result:
    print(row)
    print("\n")
    # How can I access each key and each value for example: STATUS is the value and 3 is the key
    # I want to do something like this: 
    #'if the value of 'CAP' > 1: change the value of status …我正在对用于查询数据库的脚本进行故障排除。为了确保一切正常,我将其分解为一个简单的“SHOW TABLES”查询。问题是它返回的是表的计数,而不是它应该返回的名称列表。
import pymysql
connection = pymysql.connect(host='10.0.0.208', user='admin', passwd='Passwrd')
cursor = connection.cursor()
sqlstring = 'SHOW TABLES;'
cursor.execute('USE CustDB')
x = cursor.execute(sqlstring)
print(x)
这仅返回“17”。我错过了什么??
我目前在我的应用程序中使用 Flask-login 进行用户登录会话管理。我正在使用flask-sqlalchemy,所以一切正常。由于我之前的 sql 经验,我不是 ORM 的粉丝。我喜欢直接使用SQL。可能是因为我对 ORM 的了解不深。无论如何,我的问题是 - 有没有什么方法可以在没有 ORM/flask-sqlalchemy 的情况下使用烧瓶登录,在那里我通过 pymysql 或 MySQL 连接器获取用户数据?
我知道我可以自己创建会话并在我注销时弹出,但我想知道是否有任何方法可以将flask-login或任何其他会话管理库与pymysql一起使用?
我想在“事件”列中找到“概率:10%”或“10% 高”之类的内容,但是当我使用以下代码时:
conn = pymysql.connect(host="localhost", port=3306, user='myid', passwd='mypwd', db='mydb', charset='utf8')
curs = conn.cursor()
key = "%"
curs.execute(
        "SELECT count(*) AS number FROM city WHERE events LIKE %s",
        ("%" + key + "%",)
    )
它返回表中的每一行。它执行了这个查询:
  SELECT count(*) AS number FROM city WHERE events LIKE '%%%'
像这样,我不是故意的。
搜索反斜杠符号也给了我错误的结果。
我应该怎么做才能得到正确的结果?
提前致谢。
pymysql ×10
python ×10
mysql ×7
flask ×3
python-3.x ×3
sqlalchemy ×2
flask-login ×1
sql ×1
sqlite ×1