小编Cha*_*ton的帖子

无法使用 python 连接到 mysql db - 握手错误

我正在尝试使用我的 python 脚本(在本地运行)连接到 mysql 数据库(托管在媒体神庙上),但在运行时收到错误。

错误是:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mysql/connector/connection_cext.py", line 179, in _open_connection
    self._cmysql.connect(**cnx_kwargs)
_mysql_connector.MySQLInterfaceError: Bad handshake

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/Charlie/Documents/python/myscript/mysql_insert.py", line 8, in <module>
    port="3306"
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mysql/connector/__init__.py", line 172, in connect
    return CMySQLConnection(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mysql/connector/connection_cext.py", line 78, in __init__
    self.connect(**kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mysql/connector/abstracts.py", line 735, in connect
    self._open_connection()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/mysql/connector/connection_cext.py", line 182, in _open_connection
    sqlstate=exc.sqlstate)
mysql.connector.errors.OperationalError: 1043 (08S01): Bad handshake

Run Code Online (Sandbox Code Playgroud)

这是脚本中的代码

import mysql.connector …
Run Code Online (Sandbox Code Playgroud)

python mysql

7
推荐指数
1
解决办法
5321
查看次数

使用pickle将python对象保存在postgres表中

我有一个 python 脚本,它创建一些对象。我希望能够将这些对象保存到我的 postgres 数据库中以供以后使用。

我的想法是我可以腌制一个对象,然后将其存储在数据库的字段中。但我在如何存储、检索和使用数据方面绕来绕去。

我尝试将 pickle 二进制字符串存储为, text但我无法弄清楚如何对其进行编码/转义。然后如何将字符串作为二进制字符串加载以进行 unpickle。

我尝试过将数据存储为byteapsycopg2.Binary(data)和没有。然后读入缓冲区并进行编码,base64.b64encode(result)但结果不一样并且无法取消。

有没有一种简单的方法可以在 SQL (postgres) 数据库中存储和检索 python 对象?

python postgresql pickle

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

如何在新数据上使用 sklearn TfidfVectorizer

我有一个相当简单的 NLTK 和 sklearn 分类器(我对此完全是菜鸟)。

我做通常的进口

import pandas as pd
import matplotlib.pyplot as plt

from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer

from sklearn.model_selection import train_test_split

from sklearn.naive_bayes import MultinomialNB

from sklearn import metrics

from sklearn.feature_extraction.text import TfidfVectorizer
Run Code Online (Sandbox Code Playgroud)

我加载数据(我已经清理过它)。这是一个非常简单的数据框,有两列。第一个是包含清理后的'post_clean'文本,第二个是'uk'或者TrueFalse

data = pd.read_pickle('us_uk_posts.pkl')
Run Code Online (Sandbox Code Playgroud)

然后我使用 tfidf 进行矢量化并分割数据集,然后创建模型

tf = TfidfVectorizer()
text_tf = tf.fit_transform(data['post_clean'])
X_train, X_test, y_train, y_test = train_test_split(text_tf, data['uk'], test_size=0.3, random_state=123)


clf = MultinomialNB().fit(X_train, y_train)
predicted = clf.predict(X_test)
print("MultinomialNB Accuracy:" , metrics.accuracy_score(y_test,predicted))
Run Code Online (Sandbox Code Playgroud)

显然,除非我完全遗漏了一些东西,否则我的准确度为 93%

我的两个问题是: …

python nlp nltk scikit-learn

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

谷歌云功能对大量任务进行排队

我正在尝试使用云函数通过每天调用外部 API 一次来更新数据。

到目前为止我有:

  • 云计划设置为调用功能 1

  • 功能 1 - 循环项目并为每个项目创建一个任务

  • 任务 - 使用函数 1 提供的数据调用函数 2

  • 功能2 - 调用外部API来获取数据并更新我们的数据库

问题是每天有大约 2k 项需要更新,而云函数在执行此操作之前会超时,因此我将它们放入队列中。但即使将项目放入队列中,云功能也会花费太长时间,因此在添加所有项目之前就会超时。

有没有一种简单的方法可以一次将多个任务批量添加到队列中?

如果做不到这一点,有更好的解决方案吗?

全部用python编写

函数1的代码:

def refresh(request):
    for i in items:
        # Create a client.
        client = tasks_v2.CloudTasksClient()

        # TODO(developer): Uncomment these lines and replace with your values.
        project = 'my-project'
        queue = 'refresh-queue'
        location = 'europe-west2'
        name = i['name'].replace(' ','')
        url = f"https://europe-west2-my-project.cloudfunctions.net/endpoint?name={name}"

        # Construct the fully qualified queue name.
        parent = client.queue_path(project, location, queue)

        # Construct the …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-platform google-cloud-functions google-cloud-scheduler google-cloud-tasks

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

谷歌云存储从字节上传失败

我正在尝试在 python 中动态创建一个文件,然后将其上传到谷歌云存储,但我无法从字符串或字节对象上传。

脚本的基本设置是

from google.cloud import storage

storage_client = storage.Client()

storage_client = storage.Client()
bucket = storage_client.bucket("bucket_name")
blob = bucket.blob("destination_blob_name")
Run Code Online (Sandbox Code Playgroud)

如果我然后获取一个文件并运行upload_from_filename它上传就可以了

blob.upload_from_filename("source_file_name.pdf")
Run Code Online (Sandbox Code Playgroud)

如果我获取相同的文件但尝试使用上传upload_from_string

with open('source_file_name.pdf', 'rb') as f:
    file_string = f.read()
    blob.upload_from_string(file_string, content_type='application/pdf')
Run Code Online (Sandbox Code Playgroud)

我收到错误:

TypeError: None could not be converted to bytes
Run Code Online (Sandbox Code Playgroud)

我已经检查过并且file_string是一个有效的字节对象

同样,如果我尝试upload_from_file

with open('source_file_name.pdf', 'rb') as f:
    file_string = f.read()
    blob.upload_from_file(file_string, content_type='application/pdf')
Run Code Online (Sandbox Code Playgroud)

我收到错误:

AttributeError: 'bytes' object has no attribute 'tell'
Run Code Online (Sandbox Code Playgroud)

在我的实际用例中,我使用 BytesIO 创建一个字节对象,它看起来像

pdf = BytesIO()
pisa.CreatePDF(html, pdf)
resp = pdf.getvalue()
pdf.close() …
Run Code Online (Sandbox Code Playgroud)

python bytesio google-cloud-storage

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

reddit 的 feedparser 返回空

我正在尝试使用 feedparserpython从 sub_reddit 获取最新的帖子。

我有下面的代码,但当我运行它时它没有返回任何内容。

import feedparser

feed = feedparser.parse("http://www.reddit.com/r/funny/new/.rss")
#feed = feedparser.parse("http://feeds.bbci.co.uk/news/england/london/rss.xml")

feed_entries = feed.entries

for entry in feed.entries:
    article_title = entry.title
    article_link = entry.link
    article_published_at = entry.published # Unicode string
    article_published_at_parsed = entry.published_parsed # Time object
    print (article_title)
Run Code Online (Sandbox Code Playgroud)

python rss feedparser

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