Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python列表中的SQLAlchemy更新和/或插入MySQL数据库_Python_Mysql_Web Scraping_Sqlalchemy_Mysql Python - Fatal编程技术网

如何使用Python列表中的SQLAlchemy更新和/或插入MySQL数据库

如何使用Python列表中的SQLAlchemy更新和/或插入MySQL数据库,python,mysql,web-scraping,sqlalchemy,mysql-python,Python,Mysql,Web Scraping,Sqlalchemy,Mysql Python,我正在构建一个会反复运行的webscrape,它将插入新数据或根据ID更新数据。如果'ID'='ID':我的目标是避免重复。MySQL表已经准备好并构建好了。在使用SQLAlchemy在MySQL数据库中插入/更新python列表之前,最好的python方法是什么 以下是我的家属: from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import Session import requests from bs4

我正在构建一个会反复运行的webscrape,它将插入新数据或根据ID更新数据。
如果'ID'='ID':
我的目标是避免重复。MySQL表已经准备好并构建好了。在使用SQLAlchemy在MySQL数据库中插入/更新python列表之前,最好的python方法是什么

以下是我的家属:

from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session 
import requests
from bs4 import BeautifulSoup
from time import sleep
from datetime import datetime
import time
engine = create_engine("mysql+pymysql:///blah")

我使用一个函数来分配刮取数据中的每个

def functionscrape( **kwargs ):
    scrape = {
        'id': '',
        'owner': '',
        'street': '',
        'city': '', 
        'state': '', 
        }
    scrape.update(kwargs)
    return (scrape)
下面的列表就是一个例子,但随着每个网页的出现,列表会不断变化

myList = 
[{
        'id': '111',
        'owner': 'Bob',
        'street': '1212 North',
        'city': 'Anywhere', 
        'state': 'TX', 
        },
{
        'id': '222',
        'owner': 'Mary',
        'street': '333 South',
        'city': 'Overthere', 
        'state': 'AZ', 
        }]
您可以尝试使用库进行验证


构建
Schema
并使用所需的类型定义字段。您还可以使用
@pre\u load
@post\u load
装饰器来操作数据

我正在使用帮助器函数创建动态sql更新查询:

def construct_update(table_name, where_vals, update_vals):
    query = table_name.update()
    for k, v in where_vals.items():
        query = query.where(getattr(table_name.c, k) == v)
    return query.values(**update_vals)
基本上,您将函数传递给表和两个字典。在您的例子中,第一个是{'id':id},第二个是您想要更新的所有值,如

{
    'owner': 'Bob',
    'street': '1212 North',
    'city': 'Anywhere', 
     etc...
}
然后,helper函数返回可以使用执行的查询

my_session = Session(engine)
my_session.execute(query)
不幸的是,使用这种方法,您将不得不单独更新每一行(无批量更新)——但如果您能够接受这种方法,那么这种方法可以很好地工作

否则,这里有一篇关于批量更新的类似帖子: