如何使用sql alchemy根据另一个表的输出调用mysql表?

时间:2019-04-10 16:39:05

标签: python mysql sql sqlalchemy mysql-python

此代码使用sql-alchemy调用mysql表中的表

engine = create_engine("mysql+mysqldb://o:"+'o'+"@10.10.10.10/hukke"+"?charset=utf8mb4")

x="SELECT * FROM table1 Where  "
data = pd.read_sql_query(x,con = engine)
print(data)

输出:

      0        |      1
  userid22     |     sun
  userid33     |     mon
  userid44     |     earth
  ......
  ......
  .....

表1具有n行。例如,userid22具有大约10 k行。像3000个用户ID在表2中有100万行

如何调用第一个表的输出以获取第二个表中的值

表1返回了userid22,userid33,userid44等。因此采用这三个值可以调用与表2中的值相关的行。

表1模式:

      0        |      1
  userid22     |     sun
  userid33     |     mon
  userid44     |     earth
  ......
  ......
  .....

表2模式:

      0        |      1    |   2
  userid22     |     abc   |   acd
  userid33     |     bdc   |   axw
  userid44     |     earth |    asd
  ......
  ......
  .....

我需要的输出:

使用表1中的前三个返回列。调用表2中的值。

4 个答案:

答案 0 :(得分:2)

第一个邮政编码具有属性data-idx,该属性的索引从0开始运行,因此第一个邮政编码将具有data-idx="0"。您还需要每次重新定位搜索栏,以防止StaleElementReferenceException

driver.maximize_window()
driver.get(url)

pincodencodee = {'new york': -1, 'delhi': -1}
for key in pincodencodee.keys():
    search = driver.find_element_by_name('q')
    search.clear()
    search.send_keys(key + ' pincode')
    search.send_keys(Keys.RETURN)

    code = driver.find_element_by_css_selector('.rl_item[data-idx="0"] .title')
    pincodencodee[key] = code.text

driver.quit()

print(pincodencodee) # {'new york': '10001', 'delhi': '110001'}

答案 1 :(得分:0)

似乎需要加入

select a.col0, a.col1, b.col1, b.col2
from tabl1 a 
inner join b ona.col0 = b.col0

或表1的前3个值

select a.col0, a.col1, b.col1, b.col2
from (
   select col0
   from table1
   order by col0
   limit 3
) t  a 
inner join b ona.col0 = b.col0

答案 2 :(得分:-1)

好的,这是一个需要恒定dom结构或繁琐的正则表达式的问题。

我不会在正则表达式上浪费时间,但是我可以帮助您提取代码本身。

所以我将如何处理这个问题是尝试在浏览器上执行javascript,这样就可以了:

webdriver.execute_script('script')

这本身是不好的,所以让我们更进一步。让我们初始化一个变量并将其命名为area_code,以便随后将其推入列表,然后将其作为参数传递给execute_script()函数。还可以使用javascript抓取代码。

area_code = "0"
webdriver.execute_script("arguments[0] = document.getElementsByClassName('title')[0].innerText", area_code )

第二行arguments[0]的确是我们正在设置的area_code变量。

然后,您可以执行键值或2D数组来存储数据。

答案 3 :(得分:-1)

您想要的输出是:

{Newyork: 10001, Delhi: 110001}

大概是一个Python Dictionary,您需要使用提供的列表中的Keys以及Google Search结果中的Values来构造。为此,您可以使用以下Locator Strategies

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.keys import Keys
    
    cities = ['newyork','delhi']
    search_texts = [city + ' pincode' for city in cities]
    print(search_texts)
    pincode = []
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("start-maximized")
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    chrome_options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=chrome_options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.google.com/")
    for my_text in search_texts:
        try:
            search = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "q")))
            search.clear()
            search.send_keys(my_text)
            search.send_keys(Keys.RETURN)
            element_text = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='rl_item rl_item_base']//div[@class='title']"))).text
            pincode.append(element_text)
        except TimeoutException as e:
            print(e)
    Dict = dict(zip(cities, pincode))
    print(Dict)
    driver.quit()
    
  • 控制台输出:

    ['newyork pincode', 'delhi pincode']
    {'newyork': '10001', 'delhi': '110001'}