标签: pymysql

python3 sqlalchemy pymysql 连接字符串

使用python3,我可以使用pymysql连接到mysql。一切都按预期进行。所附代码有效。

import pymysql

conn = pymysql.connect(host='127.0.0.1',  unix_socket='/home/jhgong/mysql/tmp/mysql.sock', user='root', passwd='my_pass', db='my_db', port='3333')
cur = conn.cursor()
cur.execute('select user from auth_users')
for i in cur:
    print(i)
Run Code Online (Sandbox Code Playgroud)

试图让 sqlalchemy 与 pymysql 连接,默认示例字符串似乎不起作用。除非我声明端口号和 unix_socket,否则上面的示例不起作用。

下面是我一直用来尝试连接 sqlalchemy 的内容。我假设套接字和端口号都是需要的。我使用 connect_args 来提供带有额外 unix_socket 位置的哈希值。没有喜悦。

附上我一直在使用的产生错误的片段。

conarg = {
   'unix_socket':'/home/jhgong/mysql/tmp/mysql.sock',
   'db'         :'ice'
}
engine = create_engine('mysql+pymysql://root:my_pass@127.0.0.1:3333/my_db',   connect_args = conarg, echo=True)
connection = engine.connect()
Run Code Online (Sandbox Code Playgroud)

无论有或没有 conarg 哈希中的数据库,我都会收到以下错误:

>>> connection = engine.connect()
2013-01-17 13:04:20,819 INFO sqlalchemy.engine.base.Engine b'SELECT DATABASE()'
2013-01-17 13:04:20,819 INFO sqlalchemy.engine.base.Engine ()
Traceback (most recent call last):
  File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/pool.py", line …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy python-3.x pymysql

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

在内存高效生成器中使用 PyMySql 的正确方法

我想编写一个生成器函数,该函数将在内存有限的系统上运行,该系统使用 PyMySql(或 MySQLDb)一次返回一个选择查询的结果。以下作品:

#execute a select query and return results as a generator
def SQLSelectGenerator(self,stmt):
    #error handling code removed
    cur.execute(stmt)

    row = ""
    while row is not None:
        row = self.cur.fetchone()
        yield row
Run Code Online (Sandbox Code Playgroud)

然而,以下内容似乎也有效,但它是否正在执行 fetchall() 是神秘的。我在 Python DB API 中找不到当您将游标对象作为列表进行迭代时到底会发生什么:

#execute a select query and return results as a generator
def SQLSelectGenerator(self,stmt):
    #error handling code removed
    cur.execute(stmt)

 for row in self.cur:
    yield row
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,以下内容都会成功打印所有行

stmt = "select * from ..."
for l in SQLSelectGenerator(stmt):
    print(l)
Run Code Online (Sandbox Code Playgroud)

所以我想知道第二种实现是更好还是更差,以及它是调用 fetchall 还是用 fetchone 做一些棘手的事情。Fetchall …

python mysql mysql-python pymysql

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

读取 .sql 文件以在 Python 中执行 (pymysql)

我正在尝试创建一个多脚本工具,它将采用 .sql 文件的参数并执行它。

我已经设置了一个简单的测试,仅在一个数据库上执行,但是语法每次都会给我带来问题。

DELIMITER $$
CREATE DEFINER=`a_user`@`%` PROCEDURE `a_procedure`(
    IN DirectEmployeeID TEXT,
    IN StartRange DATE,
    IN EndRange DATE
)
BEGIN
SELECT aColumn
WHERE thisThing = 1;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

需要明确的是,该脚本已经过测试,并且在通过时可以正常工作,如下所示:

mysql -uuser -p -hhost -Pport databaseName < file.sql
Run Code Online (Sandbox Code Playgroud)

也可以通过 mysql 工作台工作。

我在另一个网站上看到了这种类型的解决方案:

with conn.cursor() as cursor:
    f = sys.argv[1]
    file = open(f, 'r')
    sql = " ".join(file.readlines())
    cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)

这给了我一个 MySQL 语法错误:

pymysql.err.ProgrammingError: (1064, u"You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL …
Run Code Online (Sandbox Code Playgroud)

python mysql pymysql

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

pymysql连接线程安全吗?pymysql游标线程安全吗?

我有一个队列数据结构,其中多个线程消耗项目,每个线程将使用 PyMySQL 写入数据库,线程之间不需要其他同步。

在所有线程中使用来自同一个 pymysql 连接的同一个游标是否可以自由竞争?

来自同一连接的每个线程使用不同的游标是否可以自由竞争?

(当然在多线程中使用多个连接是可以的,因为在这种情况下没有共享资源,我对这种情况没有兴趣)

python mysql multithreading thread-safety pymysql

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

将字典和变量列表插入表中

lst = [{'Fruit':'Apple','HadToday':2},{'Fruit':'Banana','HadToday':8}]
Run Code Online (Sandbox Code Playgroud)

我有一长串上述形式的词典。
我有两个固定变量。

person = 'Sam'
date = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)

我希望将此信息插入到表格中mysql

我目前是怎么做的

for item in lst:
    item['Person'] = person
    item['Date'] = date

cursor.executemany("""
    INSERT INTO myTable (Person,Date,Fruit,HadToday)
    VALUES (%(Person)s, %(Date)s, %(Fruit)s, %(HadToday)s)""", lst)

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

他们的方法是绕过循环,因为人员和日期变量是恒定的。我努力了

lst = [{'Fruit':'Apple','HadToday':2},{'Fruit':'Banana','HadToday':8}]
cursor.executemany("""
    INSERT INTO myTable (Person,Date,Fruit,HadToday)
    VALUES (%s, %s, %(Fruit)s, %(HadToday)s)""", (person,date,lst))

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

类型错误:格式字符串参数不足

python mysql python-2.7 pymysql

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

没有flask-sqlalchemy或ORM的flask登录

我目前在我的应用程序中使用 Flask-login 进行用户登录会话管理。我正在使用flask-sqlalchemy,所以一切正常。由于我之前的 sql 经验,我不是 ORM 的粉丝。我喜欢直接使用SQL。可能是因为我对 ORM 的了解不深。无论如何,我的问题是 - 有没有什么方法可以在没有 ORM/flask-sqlalchemy 的情况下使用烧瓶登录,在那里我通过 pymysql 或 MySQL 连接器获取用户数据?

我知道我可以自己创建会话并在我注销时弹出,但我想知道是否有任何方法可以将flask-login或任何其他会话管理库与pymysql一起使用?

python flask flask-sqlalchemy pymysql flask-login

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

如何将 JSON MySQL 列查询到字典中?

我的数据库如下所示:

CREATE TABLE my_table( irrelevant_column TEXT, json_stuff JSON );
Run Code Online (Sandbox Code Playgroud)
mysql> SELECT * FROM my_table;

+------------------------+-----------------------------------------------+
| irrelevant_column      | json_stuff                                    |
+------------------------+-----------------------------------------------+
| blah blah              | { 'this': 'is my json data' }                 |
| more unrelated stuff   | { 'more': 'of my data in the correct format' }|
+------------------------+-----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种优雅的方法来将 MySQL 中的 JSON 数据查询到字典列表中。

我尝试过使用DictCursor

cursor = connection.cursor( pymysql.cursors.DictCursor )
cursor.execute( "SELECT json_stuff FROM my_table" )
rows = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

但它不能正确处理 JSON 列类型。它返回这个:

[
  { "json_stuff": "<json_stuff row 1 in …
Run Code Online (Sandbox Code Playgroud)

python json pymysql

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

sqlalchemy 插入时出错,缺少绑定参数,但在 Workbench 中有效

我的程序执行 SQL 插入时一直遇到一个奇怪的问题。我定期(每天一次)在单个 INSERT 语句中使用 pymysql 发送大量数据,每隔几天我就会收到以下错误:

(sqlalchemy.exc.InvalidRequestError) A value is required for bind parameter 'D' [SQL:

在我的代码中,这是数据库连接和插入完成的方式:

会话创建:

engine = sqlalchemy.create_engine(db_host, echo = False)
self.metadata = sqlalchemy.MetaData(engine)
DB_session = sqlalchemy.orm.sessionmaker(bind = engine)
session = DB_session()
Run Code Online (Sandbox Code Playgroud)

插入功能:

def insert(self,sql):
    complete = False
    try:
        self.session.execute(sql)
        self.session.commit()
        complete = True
    except Exception as e:
        # Do some logging
    finally:
        return complete
Run Code Online (Sandbox Code Playgroud)

典型的插入语句如下所示:

INSERT INTO my_db.my_table (field_1, field_2, field_3, ... field_32) 
VALUES(data_set1),(data_set2),(data_set3)...(data_set500) 
ON DUPLICATE KEY UPDATE 
field_1=VALUES(field_1), field_2=VALUES(field_2), field_3=VALUES(field_3) ... field_32=VALUES(field_32)
Run Code Online (Sandbox Code Playgroud)

我查过这个问题,通常情况下,当用户显式设置绑定参数并且缺少一个参数时,似乎会发生这种情况,但我不明白为什么我的代码会发生这种情况,而我没有设置任何参数,而且我没有字段说出“D”的名称或知道“D”指的是什么。另外,更令人困惑的是,当我将完全相同的语句插入 MySQL …

python mysql sqlalchemy pymysql

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

Pymysql 错误 `pymysql.err.OperationalError: (2013, '在查询期间丢失与 MySQL 服务器的连接 ([Errno 104] 连接由对等方重置)')`

当我使用Pymysql连接Mysql数据库并创建SScursor来查询一个返回大约60万条数据的存储过程并每次返回一天处理该数据时,代码如下:

def get_citatorlni_gen(self):
con = pymysql.connect(user=self.user, password=self.password, database=self.database,
                      host=self.host, port=self.port)
cur = con.cursor(pymysql.cursors.SSCursor)
try:
    cur.callproc('users_balance')
    while True:
        row = cur.read_next()
        if not row:
            break
        yield row[0]

except Exception:
    raise
finally:
    cur.close()
    con.close()
Run Code Online (Sandbox Code Playgroud)

处理存储过程返回以下数据:

def chunk_gen(self):
user_balance = self.users_balance()
for count, item in enumerate(user_balance, 1):
    if count % 100 == 0:
        time.sleep(5)  # Each batch takes about 5 seconds to process
else:
    time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

每次大约10分钟后,出现以下错误

  File "/user/src/app/controller.py", line 54, in users_balance
    row = cur.read_next()
  File "/home/.local/lib/python3.6/site-packages/pymysql/cursors.py", line 464, in read_next
    return self._conv_row(self._result._read_rowdata_packet_unbuffered()) …
Run Code Online (Sandbox Code Playgroud)

pymysql

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

ModuleNotFoundError:jupyter 中没有名为“pymysql”的模块

在 jupyter 笔记本中导入 pymysql 后出现以下错误。请帮我找出错误。

import pymysql
print("Welcome")

ModuleNotFoundError  
 <ipython-input-5-7978bc79cc40> in <module>()
  1 import pymysql
  2 print("Here")

 ModuleNotFoundError: No module named 'pymysql'
Run Code Online (Sandbox Code Playgroud)

python pip python-3.x pymysql

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