标签: pymysql

使用参数时,无法使用PyMySQL插入数据

我目前正在开发一个基本查询,根据输入参数插入数据,我无法执行它.

cur.execute("INSERT INTO foo (bar1, bar2) values (?, ?)", (foo1, foo2))

我有这个错误消息:

例外的Tkinter回调回溯(最近通话最后一个):
文件"/usr/lib/python3.2/tkinter/ 初始化的.py",线1426,在调用 返回self.func(*参数)文件"test.py",第9行,在寄存器cur.execute("INSERT INTO foo(bar1,bar2)"值(?,?)",(foo1,foo2))文件"/usr/local/lib/python3.2/dist-packages/pymysql /cursors.py",第108行,执行查询=查询%escaped_args TypeError:%支持的操作数类型:'bytes'和'tuple'

foo1和foo2都是字符串类型.我试过%s,同样的错误.

python insert python-3.x pymysql

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

PyMySQL executemany with ON DUPLICATE

我有一个由字典组成的列表member,我正在这样插入一个数据库

    # Executes query for each dictionary in member.
    cursor.executemany("INSERT INTO `Citizens` (`Handle`,`Org`,`Role`, "
                       "`Rank`,`Visibility`,`Stars`,`Type`) VALUES "
                       "(%(handle)s,%(sid)s,%(roles)s,%(rank)s,"
                       "%(visibility)s,%(stars)s,%(type)s)", member)
    # Commits changes to the database.
    conn.commit()
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当我开始遇到重复成员的问题时,我决定添加一个ON DUPLICATE条款.我们的想法是,如果一个成员是重复的,我们希望Org通过连接新数据来更新他的列.所以我把代码更改为了

    # Executes query for each dictionary in member.
    cursor.executemany("INSERT INTO `Citizens` (`Handle`,`Org`,`Role`, "
                       "`Rank`,`Visibility`,`Stars`,`Type`) VALUES "
                       "(%(handle)s,%(sid)s,%(roles)s,%(rank)s,"
                       "%(visibility)s,%(stars)s,%(type)s) ON DUPLICATE"
                       " KEY UPDATE `Org`=concat(ifnull(`Org`, \"\"), "
                       "\", \", %(sid)s);", member)
    # Commits changes to the database.
    conn.commit()
Run Code Online (Sandbox Code Playgroud)

但是,这样做我得到以下错误:

There was a problem inserting member(s): (1064, …
Run Code Online (Sandbox Code Playgroud)

python mysql insert pymysql

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

如何在pymysql中开始交易?(mysql)

我想与pymysql一起使用在mysql脚本下运行。

START TRANSACTION;
BEGIN;
insert into ~~~ 
COMMIT;
Run Code Online (Sandbox Code Playgroud)

我的python源代码是

connection = pymysql.connect(~~~~~~~)
     with connection.cursor() as cursor :
         connection.begin()
         cursor.execute(~~.sql)
         connection.commit()
connection.close()
Run Code Online (Sandbox Code Playgroud)

我的问题是“ connection.begin()”与“ START TRANSACTION; BEGIN;”相同。?我要使用“开始交易;开始;”

python mysql pymysql

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

如何通过PyMSQL在UPDATE语句中获取受影响的行

看标题,我需要通过PyMYSQL更新mysql数据库上的一些行,我想知道已经更改了多少行.

码: import pymysql db = pymysql.connect(xxxx) cur = db.cursor() sql = "update TABLE set A = 'abc' where B = 'def'" cur.execute(sql, params) db.commit()

python mysql pymysql

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

Python pymysql - 遍历 mysql 表键和值

我是 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 …
Run Code Online (Sandbox Code Playgroud)

python mysql pymysql

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

MySQL 'SHOW TABLES' 返回计数而不是列表(Python)

我正在对用于查询数据库的脚本进行故障排除。为了确保一切正常,我将其分解为一个简单的“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)
Run Code Online (Sandbox Code Playgroud)

这仅返回“17”。我错过了什么??

python mysql python-3.x pymysql

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

3306端口没有监听?无法远程连接到 MySQL

我正在尝试使用 pymysql 远程连接到 MySQL,但收到错误消息:

(2003, "Can't connect to MySQL server on 'ip address' ([WinError 10061] 
No connection could be made because the target machine actively refused it)")
Run Code Online (Sandbox Code Playgroud)

在我的 my.cnf 文件中,我将绑定地址设置为 0.0.0.0 并且跳过网络不存在。运行 "sudo netstat -atn" 显示端口 3306 仅在 localhost 上侦听:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
Run Code Online (Sandbox Code Playgroud)

我的防火墙允许来自 3306 的流量:

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/udp                     ALLOW       Anywhere
80/udp                     ALLOW       Anywhere
80/tcp                     ALLOW …
Run Code Online (Sandbox Code Playgroud)

mysql sysadmin remote-access pymysql

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

每个 cursor.execute() 之后都需要 connection.commit() 吗?

cursor.execute(…)在执行之前多次执行有效的 PyMySQL 操作connection.commit(),还是connection.commit()需要在每个执行语句之后进行才能正确存储结果?这个想法是尽可能多地消除冗余语句,因为这个过程是长期运行的。

代码结构:

with connection.cursor() as cursor:
    …
    cursor.execute(SQLtype1, rowToInsert)

    cursor.execute(SQLtype2, otherToInsert)

    connection.commit() # does this account for both execute statements, or just the last?
Run Code Online (Sandbox Code Playgroud)

我已经审查了以下内容:

PyMySQL 执行/提交示例,但只有一个示例只有一个执行语句。

Python MySQLdb 示例,但有一个示例显示每个执行语句后的提交

Python SQLite 示例,显示提交前的多个执行语句,但不确定 SQLite 是否以不同方式处理

注意:由于 SQL 查询不同,executemany似乎不是一个选项。

pymysql

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

如何使用 LIKE 子句转义 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 + "%",)
    )
Run Code Online (Sandbox Code Playgroud)

它返回表中的每一行。它执行了这个查询:

  SELECT count(*) AS number FROM city WHERE events LIKE '%%%'
Run Code Online (Sandbox Code Playgroud)

像这样,我不是故意的。

搜索反斜杠符号也给了我错误的结果。

我应该怎么做才能得到正确的结果?

提前致谢。

python mysql pymysql

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

查找 PyMySQL 错误的来源 - err.InterfaceError("(0, '')")

我是一名 Discord 机器人开发人员,最近完成了一个订单。客户端在其服务器上设置应用程序时最初没有问题,但根据他们的说法,在运行“大约三个小时”后,程序开始吐出特定的堆栈跟踪错误并且不再接受命令。

该机器人使用 Discord.py 构建,并使用 Peewee 作为 ORM,使用 PyMySQL 作为数据库驱动程序。客户端运行它的服务器由 DigitalOcean 托管,如果需要有关硬件等的任何信息,客户端可以根据请求向我提供该信息。我们已经尝试卸载并重新安装所有依赖项,以及尝试它们的不同发行版,但错误仍然存​​在。

这是客户端正在接收的确切跟踪:

  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2666, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 179, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2875, in execute_sql
    cursor.execute(sql, params or ())
  File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 170, in execute
    result = self._query(query)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 328, in _query
    conn.query(q)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 516, in query
    self._execute_command(COMMAND.COM_QUERY, sql)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 750, in _execute_command
    raise err.InterfaceError("(0, '')")
peewee.InterfaceError: (0, '')
Run Code Online (Sandbox Code Playgroud)

我的 database.py 文件中的相关部分,其中打开了数据库连接: …

python-3.x peewee pymysql digital-ocean discord.py

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