标签: mysql-python

MySQL服务器已经消失 - 通过checkout事件处理程序断开连接处理不起作用

更新3/4:

我做了一些测试并证明使用checkout事件处理程序检查断开连接是否与Elixir一起使用.开始认为我的问题与session.commit()从子进程调用有关?更新:我只是通过调用session.commit()下面的子进程,更新示例来反驳自己.我正在使用多处理模块来创建子流程.

这是代码,显示它应该如何工作(甚至没有使用pool_recycle!):

from sqlalchemy import exc
from sqlalchemy import event
from sqlalchemy.pool import Pool
from elixir import *
import multiprocessing as mp

class SubProcess(mp.Process):
    def run(self):
        a3 = TestModel(name="monkey")
        session.commit()

class TestModel(Entity):
    name = Field(String(255))

@event.listens_for(Pool, "checkout")
def ping_connection(dbapi_connection, connection_record, connection_proxy):
    cursor = dbapi_connection.cursor()
    try:
        cursor.execute("SELECT 1")
    except:
        # optional - dispose the whole pool
        # instead of invalidating one at a time
        # connection_proxy._pool.dispose()

        # raise DisconnectionError - pool will …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy multiprocessing mysql-python python-elixir

8
推荐指数
1
解决办法
5370
查看次数

将MySQLdb从元组转换为Python中的字符串

我是MySQLdb的新手.我需要从存储在MySQL中的预定义数据库中读取值.我的问题是当收集值时,它们是元组格式,而不是字符串格式.所以我的问题是:有没有办法将元组转换为字符串?

以下是我的代码的详细信息

import MySQLdb

#get value from database
conn = MySQLdb.connect("localhost", "root", "123", "book")
cursor = conn.cursor()
cursor.execute("SELECT koc FROM entries")
Koc_pre = str(cursor.fetchone()) 

#create a input form by Django and assign pre-defined value
class Inp(forms.Form):
    Koc = forms.FloatField(required=True,label=mark_safe('K<sub>OC</sub> (mL/g OC)'),initial=Koc_pre) 

#write out this input form
class InputPage(webapp.RequestHandler):
    def get(self):
         html = str(Inp())
         self.response.out.write(html)
Run Code Online (Sandbox Code Playgroud)

输出采用元组格式"Koc =('5',)",但我希望"koc = 5".那么有人可以给我一些我应该检查的建议或参考书吗?

提前致谢!

django mysql-python

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

cursor.fetchone() 返回 None 但数据库中的行存在

我正在用 python 编写一个与 MySQL 数据库交互的程序。对于 sql 查询,我使用 MySQLdb。问题是fetchone()返回 None 但使用数据库浏览器我可以看到行存在。这段代码:

query = "SELECT * FROM revision WHERE rev_id=%s;" 
cursor.execute(query % revision_id)
row = cursor.fetchone()
if row == None:
    raise Exception("there isn't revision with id %s" % revision_id)
Run Code Online (Sandbox Code Playgroud)

我不知道这里发生了什么。有任何想法吗?

编辑:好的,在某些情况下,它在某些情况下有效,但无论如何,当它不起作用时,表中存在该行。我将一个游标对象传递给一个函数,上面的代码在函数中。问题与这个游标对象有关。问题可能是我将游标作为参数传递给函数吗?我该如何测试?

EDIT2:是的,问题是光标在我多次使用后不起作用。是因为其他程序连接到数据库还是我做错了什么。我有一个while循环,我在其中调用一个函数来从数据库中获取信息。经过一些迭代后,它不再起作用。还有另一个程序在while循环工作时写入数据库。

python mysql mysql-python

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

如何在Django的安装文件中指定多个"init_command"

我在Django中与MySQL数据库的连接有以下设置.

'default': {
    'NAME' : MYSQL_DB_NAME,
    #'ENGINE' : 'mysql',
    'ENGINE' : 'django.db.backends.mysql',
    'USER' : 'ccurvey',
    'PASSWORD' : MYSQL_PASSWORD,
    'HOST' : MYSQL_HOST,
    'PORT' : '',
    'OPTIONS' : {
        'init_command' : 'set storage_engine=INNODB',
        },
    },
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

如果我想在"init_command"中添加另一个"set"命令,那该咒语是什么?

        'init_command' : ('set storage_engine=INNODB',
                           'set transaction isolation level read committed'),
Run Code Online (Sandbox Code Playgroud)

给我"connect()参数必须是字符串,而不是元组"

        'init_command' : ('set storage_engine=INNODB; set transaction isolation level read committed;'),
Run Code Online (Sandbox Code Playgroud)

给我

_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")
Run Code Online (Sandbox Code Playgroud)

django mysql-python

8
推荐指数
1
解决办法
2955
查看次数

使用多个SQL Statments更新数据库

我正在使用从MySQL站点下载的mysql connector.Python 1.0.9.

这里有一个样本

DROP TABLE IF EXISTS my_table; 
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT UNIQUE,
Shot VARCHAR(4),
sec varchar(5),
lay VARCHAR(15) NOT NULL,
lay_status VARCHAR(15) NOT NULL,
blk VARCHAR(10) NOT NULL,
blk_status VARCHAR(15) NOT NULL,
pri VARCHAR(10) NOT NULL,
pri_status VARCHAR(15) NOT NULL,
ani VARCHAR(10) NOT NULL,
ani_status VARCHAR(15) NOT NULL,
status VARCHAR(5)
);

INSERT INTO my_table VALUES
(1,'SH01','3','1863','yes','1863','yes','P4645','yes','P4557','yes','Over'),
(2,'SH02','2.5','1863','yes','P4645','no','P4557','yes','1863','no','Over'),
(3,'SH03','0.5','P4645','yes','P4557','yes','1863','yes','1863','yes','WIP'),
(4,'SH04','1.25','1863','no','P4645','no','P4557','yes','1863','yes','RTK'),
(5,'SH05','1','1863','yes','1863','yes','P4645','yes','P4557','yes','WIP'),
(6,'SH06','6','P4557','yes','P4645','yes','P4645','yes','P4557','yes','WIP');
Run Code Online (Sandbox Code Playgroud)

我能够执行如下的单个SQL语句.

import mysql.connector

cnx = mysql.connector.connect(user='scott', database='test')
cursor = cnx.cursor() …
Run Code Online (Sandbox Code Playgroud)

python mysql database-connection mysql-python

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

将两个列表合并到一个字典中时保留排序

我使用mysqldb连接到mysql数据库,我获取变量中的元数据/列和另一个中的数据/行.现在我必须将列表和元组合并为一个字典并保留顺序.我知道dicts是无序的,但除此之外还有其他选择吗?

cursor.description = ['userid', 'cid', 'mid', 'did', 'msid']
data = (29L, 35L, None, '', None)

result = {}
for i in data:
    result.update = dict(zip(cols, i))
Run Code Online (Sandbox Code Playgroud)

预期结果

result = {'userid': 29L, 'cid': 35L, 'mid': None, 'did': '', 'msid': None}
Run Code Online (Sandbox Code Playgroud)

python dictionary tuples list mysql-python

8
推荐指数
1
解决办法
6553
查看次数

Python MySQLdb - 错误1045:拒绝用户访问

我有一个类似的python代码

import MySQLdb
import sys

try:
    con = MySQLdb.connect(host = 'localhost',user = 'crawler',passwd = 'crawler', db = 'real_estate_analytics')

    #... rest of code ...

except MySQLdb.Error, e:

    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

问题是我收到以下错误:

Error 1045: Access denied for user 'crawler'@'localhost' (using password: YES)

如果我在终端上的mysql mysql -u crawler -pcrawler我可以访问数据库没有问题.

mysql> show databases;
+-----------------------+
| Database              |
+-----------------------+
| information_schema    |
| AL                    |
| cloversoup            |
| codebar               |
| mysql                 |
| performance_schema    |
| real_estate_analytics |
| …
Run Code Online (Sandbox Code Playgroud)

python mysql mysql-python

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

virtualenv,可以找到重定位的库(如MySQLdb的mysqlclient库)

我希望能够共享一个自包含的virtualenv,即确保安装的所有脚本都能够直接运行而无需设置任何内容.例如,我在使用MySQL-python的virtualenv中安装了一个脚本.不幸的是,导入MySQLdb会查找一个共享库(libmysqlclient.so),该库被移动到我系统上的标准目录以外的地方.有没有办法保证我的virtualenv每次有人使用它时都会找到它?

python mysql shared-libraries virtualenv mysql-python

8
推荐指数
2
解决办法
2805
查看次数

在Azure上安装mysql-python的错误

不确定我是否应该使用Server Overflow ...在Azure上使用Django网站,通过GitHub进行部署...我在requirements.txt中有mysql-python甚至可以将site-packages添加到我的应用程序根目录...出现以下错误.

错误:需要Microsoft Visual C++ 9.0(无法找到vcvarsall.bat).从http://aka.ms/vcpython27获取它

python django azure mysql-python

8
推荐指数
1
解决办法
544
查看次数

to_sql 时“并非所有参数都在字符串格式化期间转换”

我正在尝试以下一段代码,这是我在 2016 年的一本书中找到的:

import MySQLdb
import pandas as pd

# database setup omitted for the sake of brevity

nr_customers = 100
colnames = ["movie%i" %i for i in range(1, 33)]
pd.np.random.seed(2015)
generated_customers = pd.np.random.randint(0,2,32 * nr_customers).reshape(nr_customers,32)
data = pd.DataFrame(generated_customers, columns = list(colnames))
data.to_sql('cust',mc,index=True,if_exists='replace',index_label='cust_id')
Run Code Online (Sandbox Code Playgroud)

它只是给了我以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~/anaconda3/envs/TestEnv/lib/python3.7/site-packages/MySQLdb/cursors.py in execute(self, query, args)
    242             try:
--> 243                 query = query % args
    244             except TypeError as m:

TypeError: not all arguments converted during string formatting

During handling …
Run Code Online (Sandbox Code Playgroud)

python mysql-python pandas

8
推荐指数
1
解决办法
9569
查看次数